java 把string 写入文件_使用Java Nio将String写入文件的最佳方法

我需要使用java nio将巨大的字符串写入(附加)到平面文件。编码为ISO-8859-1。

目前,我们正在编写如下图所示。有没有 更好的 方法可以做到这一点?

public void writeToFile(Long limit) throws IOException{

String fileName = "/xyz/test.txt";

File file = new File(fileName);

FileOutputStream fileOutputStream = new FileOutputStream(file, true);

FileChannel fileChannel = fileOutputStream.getChannel();

ByteBuffer byteBuffer = null;

String messageToWrite = null;

for(int i=1; i

//messageToWrite = get String Data From database

byteBuffer = ByteBuffer.wrap(messageToWrite.getBytes(Charset.forName("ISO-8859-1")));

fileChannel.write(byteBuffer);

}

fileChannel.close();

}

编辑:尝试了两个选项。以下是结果。

@Test

public void testWritingStringToFile() {

DiagnosticLogControlManagerImpl diagnosticLogControlManagerImpl = new DiagnosticLogControlManagerImpl();

try {

File file = diagnosticLogControlManagerImpl.createFile();

long startTime = System.currentTimeMillis();

writeToFileNIOWay(file);

//writeToFileIOWay(file);

long endTime = System.currentTimeMillis();

System.out.println("Total Time is " + (endTime - startTime));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

*

* @param limit

* Long

* @throws IOException

* IOException

*/

public void writeToFileNIOWay(File file) throws IOException {

FileOutputStream fileOutputStream = new FileOutputStream(file, true);

FileChannel fileChannel = fileOutputStream.getChannel();

ByteBuffer byteBuffer = null;

String messageToWrite = null;

for (int i = 1; i < 1000000; i++) {

messageToWrite = "This is a test üüüüüüööööö";

byteBuffer = ByteBuffer.wrap(messageToWrite.getBytes(Charset

.forName("ISO-8859-1")));

fileChannel.write(byteBuffer);

}

}

/**

*

* @param limit

* Long

* @throws IOException

* IOException

*/

public void writeToFileIOWay(File file) throws IOException {

FileOutputStream fileOutputStream = new FileOutputStream(file, true);

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(

fileOutputStream, 128 * 100);

String messageToWrite = null;

for (int i = 1; i < 1000000; i++) {

messageToWrite = "This is a test üüüüüüööööö";

bufferedOutputStream.write(messageToWrite.getBytes(Charset

.forName("ISO-8859-1")));

}

bufferedOutputStream.flush();

fileOutputStream.close();

}

private File createFile() throws IOException {

File file = new File(FILE_PATH + "test_sixth_one.txt");

file.createNewFile();

return file;

}

使用ByteBuffer和Channel:花费了4402 ms

使用缓冲的Writer:占用563毫秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值