Запись файлов обычно используется при разработке гаджетов, например, при сканировании информации определенных веб-сайтов, объем данных не очень велик, и его можно сохранить локально. Конечно, если у вас есть какие-то дополнительные навыки, такие как многопоточность, работа в сети и т. д., гаджеты будут интереснее.
Вот посмотрите на различные способы записи файлов в Java:
- BufferedWriter
- PrintWriter
- FileOutputStream
- DataOutputStream
- RandomAccessFile
- FileChannel
- Files
BufferedWriter
Запишите информацию о методе, определенную в классе, в файл
static String fileName = "/Users/aihe/tmp/writeFileDemo.txt";
static void writeFileWithBufferedWriter() throws IOException {
Method[] methods = WriteFileDemo.class.getDeclaredMethods();
String str = Arrays.toString(methods);
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(str);
writer.close();
}
Добавить информацию к существующему файлу:
static void appendFileWithBufferedWriter() throws IOException {
// FileWriter的第二个参数代表是否追加
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName,true));
writer.append("追加信息");
writer.close();
}
PrintWriter
PrintWriter может выводить форматированную информацию в файл.
static void writingFileWithPrintWriter()
throws IOException {
Method[] methods = WriteFileDemo.class.getDeclaredMethods();
String str = Arrays.toString(methods);
// 可以使用FileWriter,BufferedWriter
FileWriter fileWriter = new FileWriter(fileName);
PrintWriter printWriter = new PrintWriter(fileWriter);
printWriter.printf("当前类的方法信息: %s \n方法的个数:%d \n", str, methods.length);
printWriter.close();
}
FileOutputStream
Чтобы записать двоичные данные в файл, вам нужно преобразовать строку в байты.
static void writingFileWithFileOutputStream()
throws IOException {
Method[] methods = WriteFileDemo.class.getDeclaredMethods();
String str = Arrays.toString(methods);
FileOutputStream outputStream = new FileOutputStream(fileName);
// 需要将String转换为bytes
byte[] strToBytes = str.getBytes();
outputStream.write(strToBytes);
outputStream.close();
}
DataOutputStream
написано как выше
static void writingFileWithDataOutputStream()
throws IOException {
Method[] methods = WriteFileDemo.class.getDeclaredMethods();
String str = Arrays.toString(methods);
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
outStream.writeUTF(str);
outStream.close();
// verify the results
String result;
FileInputStream fis = new FileInputStream(fileName);
DataInputStream reader = new DataInputStream(fis);
result = reader.readUTF();
reader.close();
System.out.println(result.equals(str));
}
RandomAccessFile
Чтобы записать или отредактировать существующий файл вместо записи нового файла или просто добавления, мы можем использовать RandomAccessFile. Этот класс позволяет нам писать в определенное место следующим образом:
Используйте метод writeUTF при написании китайского, иначе он может быть искажен.
static void writeToPositionWithRAF(String filename, long position)
throws IOException {
RandomAccessFile writer = new RandomAccessFile(filename, "rw");
writer.seek(position);
//写入中文的时候防止乱码
writer.writeUTF("新内容");
writer.close();
}
FileChannel
При работе с большими файлами FileChannel работает быстрее, чем стандартный io.
static void writeWithFileChannel() throws IOException {
RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
FileChannel channel = stream.getChannel();
String value = WriteFileDemo.class.getSimpleName();
byte[] strBytes = value.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
buffer.put(strBytes);
buffer.flip();
channel.write(buffer);
stream.close();
channel.close();
}
Files
Files — это класс инструментов, представленный в Java7, с помощью которого мы можем создавать, перемещать, удалять и копировать файлы. Каталог также представляет собой файл особого типа, который работает и для каталогов. Конечно, его также можно использовать для чтения и записи файлов.
static void writeWithFiles()
throws IOException {
String str = "Hello";
Path path = Paths.get(fileName);
byte[] strToBytes = str.getBytes();
Files.write(path, strToBytes);
String read = Files.readAllLines(path).get(0);
System.out.println(str.equals(read));
}
Наконец
Не забудьте закрыть файловый поток при манипулировании файлом, или вы можете использовать синтаксис попытки с ресурсом java7.
- BufferedWriter обеспечивает эффективное чтение и запись символов, строк и массивов.
- PrintWriter пишет форматированный текст
- FileOutputStream записывает в двоичный поток
- DataOutputStream записывает первичный тип
- RandomAccessFile читает и записывает файлы случайным образом и редактирует файлы в указанном месте.
- FileChannel записывает большие файлы