有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java bufferedwriter截断字符串

我将一个字符串写入一个文件,字符串非常长,大约100K,以下是我的代码:

public static void main(String[] args) throws IOException {
    String s = "kkkk";

    BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/liaoliuqing/Downloads/1.txt",true),1024);
    bw.write(s);
    bw.flush();
    bw.close();
}

当绳子短时,它工作得很好。但是当字符串很长时,字符串将被截断,并且只有一些字符写入文件

有什么问题

这是我的代码,它可以在许多线程中工作

private void writeToFile(String filterName, String messageToWrite)
        throws IOException {
    if(!messageToWrite.contains("2015")){
        LOG.warn(messageToWrite);
    }
    bufferWritter = getBufferWriter(filterName, messageToWrite);
    bufferWritter.write(messageToWrite);
    if(!messageToWrite.contains("2015")){
        LOG.warn(messageToWrite);
    }
    bufferWritter.flush();
}

我很确定messageToWrite是完整的字符串,因为我记录了它。但只有字符串的后一部分被写入文件

它在大约10个线程中工作

我发现了问题所在。当一个线程正在写文件时,则是另一个线程运行的时间,第一个线程的内容将与2rd线程混淆。 我尝试将bufferwriter的缓冲区大小增加

    returnWriter = new BufferedWriter(new FileWriter(fileName, true),64*1024);

但这不是工作。它仍然只向文件写入8192(默认缓冲区大小)。 如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    您需要确保一次只有一个线程可以使用缓冲写入程序。一个简单的解决方案是使writeToFile方法同步。否则你可以使用某种锁定机制。您可以使用Object.wait/notify或使用来自java的信号量。util。并发包