试图逐行将字符串写入文件

时间:2013-11-10 22:32:14

标签: java jfilechooser

下面的代码将一个数组写入文件中,但我的问题是它将它写在一行上,而不是我每次写入时都需要它在换行符上,我无法弄清楚如何制作这个部分代码工作。我尝试添加换行符的代码,就像你对字符串一样,但我认为这不是正确的方法,因为它不起作用。

private class SaveButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    { 
      String [] data = dataSource.getList();

      JFileChooser chooser = new JFileChooser();
      chooser.setCurrentDirectory(new File("/home/me/Documents"));
      int retrival = chooser.showSaveDialog(null);
      if (retrival == JFileChooser.APPROVE_OPTION) {
        try {
          FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
          for (int i=0; i<data.length ; i++)
          {

            fw.write(data[i] + " \n");
          }
          //fw.write(data.toString());
          fw.close();
        } catch (Exception ex) {
          ex.printStackTrace();
        }

      }

    }
  }

4 个答案:

答案 0 :(得分:2)

你试过吗

fw.write(data[i] + System.getProperty("line.separator"));

答案 1 :(得分:1)

从技术上讲,它正在编写换行符,但很可能您正在使用文本编辑器查看文本文件,该编辑器本身无法识别换行符(例如记事本)。

尝试:

fw.write(data[i] + " \r\n");

答案 2 :(得分:0)

您可以使用PrintWriter轻松打印单行

PrintWriter fw = new PrintWriter(new FileWriter(chooser.getSelectedFile()+".txt"));
for (int i=0; i<data.length ; i++) {
    fw.println(data[i]);
}
fw.close();

注意,您应该将close放在finally中,否则可能会出现未调用close的情况。实际上,您应该使用新的Java 7 try-with-resources synatx:

try(PrintWriter fw = new PrintWriter(new FileWriter(chooser.getSelectedFile()+".txt"))) {
    // stuff
} catch (IOException ex) {
    ex.printStackTrace();
}

请注意,这将输出特定于平台的换行符,因此在Windows上为\r\n,在Unix上为\n。创建文件时会遇到的一个问题是打开在另一个平台上的一个平台上创建的文件。

答案 3 :(得分:0)

FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
  1. chooser.getSelectedFile()应该已经返回带有扩展名的文件名,因此尝试向其添加扩展程序".txt"对我来说没有多大意义。

  2. 文件写入可能是一个漫长的操作。因此,您应该在单独的线程中运行文件写入操作,以避免阻塞EDT线程,其中Swing执行它的事件管理和GUI呈现任务。否则,您的应用程序可能会 FREEZED

  3. 您可能会对FileWriter(File file, boolean append)感兴趣将数据附加到现有文件中。

  4. 尝试使用System.getProperty("line.separator")为您的平台获取正确的newline separator