После работы используемая технология меняется вместе с изменениями проекта, иногда C#, иногда Java и конечно некоторые другие фрагментированные технологии. В целом C# занимает больше времени, за ним следует Java. У меня нет никаких предпочтений в отношении языков. Язык, который может работать, — это хороший язык. А с объектно-ориентированной точки зрения я думаю, что для меня нет разницы между C# и Java.
В этой статье в основном рассматривается контент, связанный с операциями ввода-вывода в Java. Ввод-вывод также является основной функцией языков программирования. Ввод-вывод в Java делится на два типа: последовательное чтение и случайное чтение.
Давайте сначала рассмотрим последовательное чтение. Существует два способа выполнения последовательного чтения: один — InputStream/OutputStream, который представляет собой поток ввода и вывода, который работает с байтами; другой — Reader/Writer, который работает с символами. потоки операции.
Ниже мы рисуем структуру InputStream
FileInputStream: управляет файлами, часто используется вместе с BufferedInputStream.
PipedInputStream: может использоваться для межпотоковой связи.
ObjectInputStream: может использоваться для сериализации объектов.
ByteArrayInputStream: используется для обработки ввода массивов байтов.
LineNumberInputStream: может выводить текущий номер строки и может быть изменен в программе.
Ниже приведена структура OutputStream.
PrintStream: предоставляет интерфейсы, аналогичные print и println, для вывода данных.
Давайте посмотрим, как использовать Stream для управления вводом и выводом.
Чтение файлов с помощью InputStream
Скопируйте код кода следующим образом:
Используйте FileInputStream для чтения информации о файле
public static byte[] readFileByFileInputStream (файл-файл) выдает IOException
{
Выход ByteArrayOutputStream = новый ByteArrayOutputStream();
FileInputStream фис = ноль;
пытаться
{
фис = новый FileInputStream (файл);
буфер байт[] = новый байт[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
output.write(буфер, 0, bytesRead);
}
}
поймать (исключение ex)
{
System.out.println("Во время чтения произошла ошибка " + file.getAbsoluteFile());
}
окончательно
{
if (fis !=null) fis.close();
if (выход!=null) output.close();
}
вернуть вывод.toByteArray();
}
Чтение файлов с помощью BufferedInputStream
Скопируйте код кода следующим образом:
public static byte[] readFileByBufferedInputStream (файл-файл) выдает исключение
{
FileInputStream фис = ноль;
BufferedInputStream бис = ноль;
Выход ByteArrayOutputStream = новый ByteArrayOutputStream();
пытаться
{
фис = новый FileInputStream (файл);
бис = новый BufferedInputStream (фис);
буфер байт[] = новый байт[1024];
int bytesRead = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
output.write(буфер, 0, bytesRead);
}
}
поймать (исключение ex)
{
System.out.println("Во время чтения произошла ошибка " + file.getAbsoluteFile());
}
окончательно
{
if (fis != null) fis.close();
if (bis != null) bis.close();
если (выход!= ноль) вывод.закрытие();
}
вернуть вывод.toByteArray();
}
Копирование файлов с помощью OutputStream
Скопируйте код кода следующим образом:
Копирование файлов с помощью FileOutputStream
public static void copyFileByFileOutputStream (файл-файл) выдает IOException
{
FileInputStream фис = ноль;
FileOutputStream fos = null;
пытаться
{
фис = новый FileInputStream (файл);
fos = новый FileOutputStream(file.getName() + ".bak");
буфер байт[] = новый байт[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer,0,buffer.length)) != -1)
{
fos.write(буфер, 0, bytesRead);
}
фос.флеш();
}
поймать (исключение ex)
{
System.out.println("Во время копирования произошла ошибка " + file.getAbsoluteFile());
}
окончательно
{
if (fis != null) fis.close();
если (fos != null) fos.close();
}
}
Скопируйте код кода следующим образом:
Копирование файлов с помощью BufferedOutputStream
public static void copyFilebyBufferedOutputStream (файл-файл) выдает IOException
{
FileInputStream фис = ноль;
BufferedInputStream бис = ноль;
FileOutputStream fos = null;
BufferedOutputStream бос = ноль;
пытаться
{
фис = новый FileInputStream (файл);
бис = новый BufferedInputStream (фис);
fos = новый FileOutputStream(file.getName() + ".bak");
Бос = новый BufferedOutputStream (fos);
буфер байт[] = новый байт[1024];
int bytesRead = 0;
while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
bos.write(буфер, 0, bytesRead);
}
бос.флеш();
}
поймать (исключение ex)
{
System.out.println("Во время копирования произошла ошибка " + file.getAbsoluteFile());
}
окончательно
{
if (fis != null) fis.close();
if (bis != null) bis.close();
если (fos != null) fos.close();
if (bos != null) bos.close();
}
}
Код здесь обрабатывает исключения очень неполно. Полный и строгий код мы приведем позже.
Давайте посмотрим на структуру Reader.
Reader здесь в основном соответствует InputStream.
Структура Writer выглядит следующим образом
Давайте рассмотрим несколько примеров использования Reader или Writer.
Используйте Reader для чтения содержимого файла
Скопируйте код кода следующим образом:
Используйте BufferedReader для чтения содержимого файла
общедоступная статическая строка readFile (строковый файл) выдает IOException
{
BufferedReader br = ноль;
StringBuffer sb = новый StringBuffer();
пытаться
{
br = новый BufferedReader (новый FileReader (файл));
Строковая линия = ноль;
while((line = br.readLine()) != null)
{
sb.append(строка);
}
}
поймать (исключение ex)
{
System.out.println("Ошибка чтения " + файла);
}
окончательно
{
если (br != null) br.close();
}
вернуть sb.toString();
}
Копирование файлов с помощью Writer
Скопируйте код кода следующим образом:
Копирование файлов с помощью BufferedWriter
public static void copyFile (строковый файл) выдает IOException
{
BufferedReader br = ноль;
BufferedWriter bw = null;
пытаться
{
br = новый BufferedReader (новый FileReader (файл));
bw = новый BufferedWriter (новый FileWriter (файл + ".bak"));
Строковая линия = ноль;
while((line = br.readLine())!= null)
{
bw.write(строка);
}
}
поймать (исключение ex)
{
System.out.println("При копировании произошла ошибка " + file);
}
окончательно
{
если (br != null) br.close();
if (bw != null) bw.close();
}
}
Давайте посмотрим, как выполнить произвольный доступ к файлам. RandomAccessFile в основном используется в Java для выполнения произвольных операций с файлами.
Создать файл фиксированного размера
Скопируйте код кода следующим образом:
Создание файлов фиксированного размера
public static void createFile (строковый файл, размер int) выдает IOException
{
Температура файла = новый файл (файл);
RandomAccessFile Raf = новый RandomAccessFile (temp, «rw»);
raf.setLength(размер);
раф.закрыть();
}
Записать случайные данные в файл
Скопируйте код кода следующим образом:
Вставка случайных данных в файл
public static void writeFile (String file, byte[] content, int startPos, int contentLength) выдает IOException
{
RandomAccessFile Raf = новый RandomAccessFile (новый файл (файл), «rw»);
раф.seek(startPos);
raf.write(content, 0, contentLength);
раф.закрыть();
}
Далее давайте рассмотрим некоторые другие распространенные операции.
Переместить файлы
Скопируйте код кода следующим образом:
Переместить файлы
public static boolean moveFile (String sourceFile, String destFile)
{
Источник файла = новый файл (исходный файл);
if (!source.exists()) бросает новое исключение RuntimeException("исходный файл не существует.");
Файл dest = новый файл (destFile);
if (!(новый файл(dest.getPath()).exists())) новый файл(dest.getParent()).mkdirs();
вернуть source.renameTo(dest);
}
Копировать файлы
Скопируйте код кода следующим образом:
Копировать файлы
public static void copyFile (String sourceFile, String destFile) выдает IOException
{
Источник файла = новый файл (исходный файл);
if (!source.exists()) бросает новое RuntimeException("Файл не существует.");
if (!source.isFile()) бросает новое исключение RuntimeException("Это не файл.");
if (!source.canRead()) throw new RuntimeException("Файл не может быть прочитан.");
Файл dest = новый файл (destFile);
если (dest.exists())
{
if (dest.isDirectory()) бросает новое RuntimeException("Назначение — папка.");
еще
{
место.удалить();
}
}
еще
{
Файл родительской папки = новый файл (dest.getParent());
if (!parentFolder.exists()) родительская папка.mkdirs();
if (!parentFolder.canWrite()) выдает новое исключение RuntimeException("Невозможно записать пункт назначения.");
}
FileInputStream фис = ноль;
FileOutputStream fos = null;
пытаться
{
фис = новый FileInputStream (источник);
fos = новый FileOutputStream (место назначения);
буфер байт[] = новый байт[1024];
int bytesRead = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
fos.write(буфер, 0, bytesRead);
}
фос.флеш();
}
поймать (IOException ex)
{
System.out.println("Во время копирования произошла ошибка " + sourceFile);
}
окончательно
{
if (fis != null) fis.close();
если (fos != null) fos.close();
}
}
копировать папку
Скопируйте код кода следующим образом:
копировать папку
public static void copyDir(String sourceDir, String destDir) выдает IOException
{
Источник файла = новый файл (sourceDir);
if (!source.exists()) бросает новое исключение RuntimeException("Источник не существует.");
if (!source.canRead()) выдает новое исключение RuntimeException("Источник не может быть прочитан.");
Файл dest = новый файл (destDir);
if (!dest.exists()) dest.mkdirs();
Файл[] arrFiles = source.listFiles();
for(int i = 0; i < arrFiles.length; i++)
{
если (arrFiles[i].isFile())
{
Читатель BufferedReader = новый BufferedReader (новый FileReader (arrFiles [i]));
Писатель BufferedWriter = новый BufferedWriter (новый FileWriter (destDir + "/" + arrFiles[i].getName()));
Строковая линия = ноль;
while((line = readLine()) != null) write.write(line);
писатель.flush();
читатель.закрыть();
писатель.закрыть();
}
еще
{
copyDir(sourceDir + "/" + arrFiles[i].getName(), destDir + "/" + arrFiles[i].getName());
}
}
}
удалить папку
Скопируйте код кода следующим образом:
удалить папку
public static void del (String filePath)
{
Файл файл = новый файл (filePath);
if (file == null || !file.exists()) return;
если (файл.isFile())
{
файл.удалить();
}
еще
{
Файл[] arrFiles = file.listFiles();
если (arrFiles.length > 0)
{
for(int i = 0; i < arrFiles.length; i++)
{
del(arrFiles[i].getAbsolutePath());
}
}
файл.удалить();
}
}
Получить размер папки
Скопируйте код кода следующим образом:
Получить размер папки
общедоступный статический длинный getFolderSize (String dir)
{
длинный размер = 0;
Файл файл = новый файл (каталог);
if (!file.exists()) бросает новое RuntimeException("каталог не существует.");
if (file.isFile()) возвращает file.length();
еще
{
String[] arrFileName = file.list();
for (int i = 0; i <arrFileName.length; i++)
{
size += getFolderSize(dir + "/" + arrFileName[i]);
}
}
размер возврата;
}
Разделить большие файлы на несколько маленьких файлов
Скопируйте код кода следующим образом:
Разделить большие файлы на несколько файлов меньшего размера
public static void SplitFile (String filePath, long unit) выдает IOException
{
Файл файл = новый файл (filePath);
if (!file.exists()) бросает новое RuntimeException("файл не существует.");
длинный размер = file.length();
if (единица измерения >= размер) return;
int count = размер % единицы измерения == 0 ? (int)(размер/единица измерения): (int)(размер/единица измерения) + 1;
Строка новыйФайл = ноль;
FileOutputStream fos = null;
FileInputStream фис = null;
байт [] буфер = новый байт [(int) единица];
фис = новый FileInputStream (файл);
длинный startPos = 0;
Строка countFile = filePath + «_Count»;
Автор PrintWriter = новый PrintWriter (новый FileWriter (новый файл (countFile)));
Writer.println(filePath + "/t" + размер);
for (int i = 1; i <= count; i++)
{
новыйФайл = Путь к файлу + «_» + я;
startPos = (я - 1) * единица измерения;
System.out.println("Создание " + newFile);
fos = новый FileOutputStream (новый файл (newFile));
int bytesRead = fis.read(buffer, 0, buffer.length);
если (bytesRead != -1)
{
fos.write(буфер, 0, bytesRead);
Writer.println(newFile + "/t" + startPos + "/t" + bytesRead);
}
фос.флеш();
фос.закрыть();
System.out.println("StartPos:" + i*unit + "; EndPos:" + (i*unit + bytesRead));
}
писатель.flush();
писатель.закрыть();
фис.закрыть();
}
Объединение нескольких небольших файлов в один большой файл
Скопируйте код кода следующим образом:
Объединение нескольких небольших файлов в один большой файл
public static void linkFiles (String countFile) выдает IOException
{
Файл файл = новый файл (countFile);
if (!file.exists()) выдает новое исключение RuntimeException("Файл подсчета не существует.");
Читатель BufferedReader = новый BufferedReader (новый FileReader (файл));
Строковая строка = readLine.readLine();
String newFile = line.split("/t")[0];
длинный размер = Long.parseLong(line.split("/t")[1]);
RandomAccessFile Raf = новый RandomAccessFile(newFile, "rw");
raf.setLength(размер);
FileInputStream фис = ноль;
байт [] буфер = ноль;
while((line = readLine()) != null)
{
String[] arrInfo = line.split("/t");
fis = новый FileInputStream (новый файл (arrInfo [0]));
буфер = новый байт[Integer.parseInt(arrInfo[2])];
длинный startPos = Long.parseLong(arrInfo[1]);
fis.read(buffer, 0, Integer.parseInt(arrInfo[2]));
раф.seek(startPos);
Raf.write(buffer, 0, Integer.parseInt(arrInfo[2]));
фис.закрыть();
}
раф.закрыть();
}
Выполнить внешнюю команду
Скопируйте код кода следующим образом:
Выполнить внешнюю команду
public static void execExternalCommand (строковая команда, строковый аргумент)
{
Процесс процесс = ноль;
пытаться
{
процесс = Runtime.getRuntime().exec(команда + " " + аргумент);
Входной поток = процесс.getInputStream();
BufferedReader br = новый BufferedReader (новый InputStreamReader (is));
Строковая линия = ноль;
while((line = br.readLine()) != null)
{
System.out.println(строка);
}
}
поймать (исключение ex)
{
System.err.println(ex.getMessage());
}
окончательно
{
if (process != null)process.destroy();
}
}