1

不是我的代码不起作用,而是我怀疑它是否非常有效。我的理论是,这不是 xD

我有一个 JTextPane,我必须在其中获取文本(基本上每次 JTextPane 换行时都换行),然后将其放入 .txt 文件中。正如我所说,一切正常,但我怀疑它的实施。这是我怀疑的部分:

public void printLog() {
    String s = logTextArea.getText();
    ArrayList<String> log = new ArrayList<>();
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < s.length(); i++) {
        if(s.charAt(i) != '\n') {
            sb.append(s.charAt(i));
        } else {
            log.add(sb.toString());
            sb.delete(0, sb.length());
        }
    }

这是整个事情仅供参考:

public void printLog() {
    String s = logTextArea.getText();
    ArrayList<String> log = new ArrayList<>();
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < s.length(); i++) {
        if(s.charAt(i) != '\n') {
            sb.append(s.charAt(i));
        } else {
            log.add(sb.toString());
            sb.delete(0, sb.length());
        }
    }
    File f = new File("JServer_Log.txt");
    BufferedWriter bw = null;
    FileWriter fr = null;
    try {
        if(f.exists()) {
            fr = new FileWriter(f,true);
        } else {
            fr = new FileWriter(f);
        }
    } catch (IOException e) {
        // Nothing to do really.
    }

    try {
        bw = new BufferedWriter(fr);
        Iterator<String> itr = log.iterator();
        bw.newLine();
        while(itr.hasNext()) {
            bw.write(itr.next());
            bw.newLine();
        }
    } catch (IOException e) {
        // Nothing to do really. We lost the log?
    } finally {
        try {
            bw.close();
        } catch(IOException ioe) {
            // The program is closing any way.
        }
    }
}
4

4 回答 4

2

有关信息,第一个代码可以替换为:

List<String> log = Arrays.asList(logTextArea.getText().split("\n"));

但其他答案为您提供了一种替换整个方法的方法。

于 2012-06-29T12:51:33.577 回答
2

为什么要打扰,使用JTextComponents.write(Writer out) 会抛出 IOExceptionwrite()这是相当接受来自本机操作系统的换行符、制表符、ei

于 2012-06-29T12:52:11.510 回答
2

看来您只需要确保使用平台的适当换行符序列即可。您可以说s = s.replace("\n", System.getProperty("line.separator"))然后将整个字符串直接写入文件。事实上,在我看来,这就是你需要的所有代码(除了异常处理,取决于你):

public void printLog() throws IOException {
  final FileWriter w = new FileWriter("JServer_Log.txt", true);
  try {
    w.write(logTextArea.getText().replace("\n", 
                                    System.getProperty("line.separator")));
  } finally { w.close(); }
}
于 2012-06-29T12:49:58.153 回答
0

使用split

String[] log = s.split("\n");
于 2012-06-29T12:51:37.363 回答