java 写文件9种方法测试分享。

0.概述

在本文中,我们将探索使用Java写入文件的不同方法。我们将使用BufferedWriter,PrintWriter,FileOutputStream,DataOutputStream,RandomAccessFile,FileChannel和Java 7 Files实用程序类。

1.使用BufferedWriter编写

让我们开始简单 - 并使用BufferedWriter将String 写入新文件:

public void bufferedWriterTest()

  throws IOException {

    String str = "Hello";

    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));

    writer.write(str);

    writer.close();

}

文件中的输出将是:

Hello

然后我们可以将String附加到现有文件,需要FileWriter增加一个参数:true,如下:

public void bufferedWriterTest()

  throws IOException {

    String str = "NowJava.com";

    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));

    writer.append(' ');

    writer.append(str);

    writer.close();

}

该文件将是:

Hello NowJava.com

2.使用PrintWriter写入

接下来 - 让我们看看如何使用PrintWriter将格式化文本写入文件:

public void printWriterTest()

  throws IOException {

    FileWriter fileWriter = new FileWriter(fileName);

    PrintWriter printWriter = new PrintWriter(fileWriter);

    printWriter.print("Some String,by NowJava.");

    printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);

    printWriter.close();

}

生成的文件将包含:

Some String,by NowJava.
Product name is iPhone and its price is 1000$

请注意我们不仅要将原始String写入文件,还要使用printf方法编写一些带格式的文本。
我们可以使用FileWriter,BufferedWriter甚至System.out创建编写器。

3.使用FileOutputStream写入

现在,让我们看看我们如何能够利用FileOutputStream中,以二进制数据写入一个文件。以下代码转换String int bytes并使用FileOutputStream将字节写入文件:

public void fileOutputStreamTest()

  throws IOException {

    String str = "https://NowJava.com";

    FileOutputStream outputStream = new FileOutputStream(fileName);

    byte[] strToBytes = str.getBytes();

    outputStream.write(strToBytes);

    outputStream.close();

}

文件中的输出当然是:

https://NowJava.com

4.使用DataOutputStream编写

接下来 - 让我们看一下如何使用DataOutputStream将String写入文件:

public void dataOutputStreamTest()

  throws IOException {

    String value = "Hello";

    FileOutputStream fos = new FileOutputStream(fileName);

    DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));

    outStream.writeUTF(value);

    outStream.close();

    // verify the results

    String result;

    FileInputStream fis = new FileInputStream(fileName);

    DataInputStream reader = new DataInputStream(fis);

    result = reader.readUTF();

    reader.close();

    assertEquals(value, result);

}

5.使用RandomAccessFile写入

现在让我们说明如何在现有文件中编写和编辑 - 而不是仅仅写入一个全新的文件或附加到现有文件。简单地说 - 我们需要随机访问。
RandomAccessFile使我们能够在给定偏移量的文件中的特定位置写入 - 从文件的开头 - 以字节为单位。以下代码写入一个整数值,其中包含从文件开头给出的偏移量:

private void writeToPosition(String filename, int data, long position)

  throws IOException {

    RandomAccessFile writer = new RandomAccessFile(filename, "rw");

    writer.seek(position);

    writer.writeInt(data);

    writer.close();

}

如果我们想要读取存储在特定位置的int,我们可以使用以下方法:

private int readFromPosition(String filename, long position)

  throws IOException {

    int result = 0;

    RandomAccessFile reader = new RandomAccessFile(filename, "r");

    reader.seek(position);

    result = reader.readInt();

    reader.close();

    return result;

}

为了测试我们的函数,让我们写一个整数 - 编辑它 - 最后,读回来:

public void writeToPositionTest()

  throws IOException {

    int data1 = 2014;

    int data2 = 1500;

    writeToPosition(fileName, data1, 4);

    assertEquals(data1, readFromPosition(fileName, 4));

    writeToPosition(fileName2, data2, 4);

    assertEquals(data2, readFromPosition(fileName, 4));

}

6.使用FileChannel写入

如果您正在处理大文件,FileChannel可能比标准IO更快。以下代码使用FileChannel将String写入文件:

public void fileChannelTest()

  throws IOException {

    RandomAccessFile stream = new RandomAccessFile(fileName, "rw");

    FileChannel channel = stream.getChannel();

    String value = "Hello";

    byte[] strBytes = value.getBytes();

    ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);

    buffer.put(strBytes);

    buffer.flip();

    channel.write(buffer);

    stream.close();

    channel.close();

    // verify

    RandomAccessFile reader = new RandomAccessFile(fileName, "r");

    assertEquals(value, reader.readLine());

    reader.close();

}

7.使用Java 7写入文件

Java 7引入了一种使用文件系统的新方法,以及一个新的实用程序类 - Files。使用Files类,我们也可以创建,移动,复制,删除文件和目录; 它还可用于读取和写入文件:

public void fileTest()

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

    assertEquals(str, read);

}

8.写入临时文件

现在,让我们尝试写入临时文件。以下代码创建一个临时文件并将String写入其中:

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java