Java несколько способов записи файлов

Java

Запись файлов обычно используется при разработке гаджетов, например, при сканировании информации определенных веб-сайтов, объем данных не очень велик, и его можно сохранить локально. Конечно, если у вас есть какие-то дополнительные навыки, такие как многопоточность, работа в сети и т. д., гаджеты будут интереснее.

Вот посмотрите на различные способы записи файлов в 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();
    }

image-20190326081928256

Добавить информацию к существующему файлу:

    static void appendFileWithBufferedWriter() throws IOException {
    	// FileWriter的第二个参数代表是否追加
        BufferedWriter writer = new BufferedWriter(new FileWriter(fileName,true));
        writer.append("追加信息");
        writer.close();
    }

image-20190326082146211

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();
    }

image-20190326082536781

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();
    }

image-20190326083040667

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();
    }

image-20190326084711766

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();

}

image-20190326085329071

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));
    }

image-20190326085644551

Наконец

Не забудьте закрыть файловый поток при манипулировании файлом, или вы можете использовать синтаксис попытки с ресурсом java7.

  • BufferedWriter обеспечивает эффективное чтение и запись символов, строк и массивов.
  • PrintWriter пишет форматированный текст
  • FileOutputStream записывает в двоичный поток
  • DataOutputStream записывает первичный тип
  • RandomAccessFile читает и записывает файлы случайным образом и редактирует файлы в указанном месте.
  • FileChannel записывает большие файлы

Ссылаться на