如何在java中在文件的循环中写入或附加字符串?

如何在java中在文件的循环中写入或附加字符串?,java,file,collections,memory-leaks,filewriter,Java,File,Collections,Memory Leaks,Filewriter,我遇到了内存问题,因为我使用了非常大的数据集,并且使用char[]和字符串导致内存泄漏,不知道为什么!所以我想把一些经过处理的数据写入一个文件,而不是存储在内存中。因此,我想使用循环将arrayList中的文本写入文件。首先,程序将检查当前工作目录中是否已经存在特定文件,如果不存在,则创建具有特定名称的文件,并开始使用循环逐行写入arrayList中的文本;如果该文件已经存在,则打开该文件并将最后一行之后的第一个数组值追加到该文件的新行中,然后开始逐行在循环中写入其他数组值 有谁能建议我用Jav

我遇到了内存问题,因为我使用了非常大的数据集,并且使用char[]和字符串导致内存泄漏,不知道为什么!所以我想把一些经过处理的数据写入一个文件,而不是存储在内存中。因此,我想使用循环将arrayList中的文本写入文件。首先,程序将检查当前工作目录中是否已经存在特定文件,如果不存在,则创建具有特定名称的文件,并开始使用循环逐行写入arrayList中的文本;如果该文件已经存在,则打开该文件并将最后一行之后的第一个数组值追加到该文件的新行中,然后开始逐行在循环中写入其他数组值

有谁能建议我用Java怎么做?我不太擅长Java,所以如果可能,请提供一些示例代码

谢谢

试试这个

ArrayList<String> StringarrayList = new ArrayList<String>(); 
    FileWriter writer = new FileWriter("output.txt", true); 
    for(String str: StringarrayList ) {
      writer.write(str + "\n");
    }
    writer.close();

我不确定您不确定流程中的哪些部分,因此我将从头开始

可序列化接口允许您将对象写入文件。任何实现可序列化的对象都可以传递到ObjectOutputStream并写入文件

ObjectOutputStream接受FileOutputStream作为参数,该参数可以附加到文件中

ObjectOutputstream outputStream = new ObjectOutputStream(new FileOutputStream("filename", true));
outputStream.writeObject(anObject);
有一些异常处理需要处理,但这些是基础。注意,对象应该实现可序列化

读取该文件非常相似,只是它使用了我提到的类的输入版本。

//在main中


任何重新搜索或粘贴您开发的一些代码的努力都将有助于为您提供解决方案或建议。您可能希望查看“StringBuilder”类,以获得更好的字符串处理性能。@E.Ar,只有在循环中附加字符串时,性能才会有所不同。在循环之前显式声明StringBuilder是获得良好结果的必要条件,忽略它将导致在每次迭代中创建StringBuilders对象。但是如果没有包含字符串的循环,默认情况下会从java 1.5以字节码的形式转换为StringBuilder,因此,在简单的情况下,不需要将+替换为StringBuilders.appendstring。在您的示例中,使用loop没有任何意义:如果有错误,您可以通过反馈和建议来纠正它,而不仅仅是微笑,我们不是在相互竞争,我们只是在互相帮助。@dantuch:有什么问题吗?@Makoto not with for,传递给写入方法的参数错误。它应该是单个字符串,而不是整个列表。我希望@MMK能在我的评论之后发现这一点。更进一步——最好不要将列表声明为ArrayList,而是将ruther声明为list
List<String> SarrayList = new ArrayList<String>(); 
.....
appendToFile (SarrayList);
public void appendToFile (List<String> SarrayList) {

      BufferedWriter bw = null;
      boolean myappend = true;
      try {
         bw = new BufferedWriter(new FileWriter("myContent.txt", myappend));
         for(String line: SarrayList ) {
         bw.write(line);
         bw.newLine();
         }
         bw.flush();
      } catch (IOException ioe) {
        ioe.printStackTrace();
      } finally { 
        if (bw != null) try {
        bw.close();
        } catch (IOException ioe2) {
        // ignore it  or write notice
        }
      }

   }