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

プラットフォームの適切な改行シーケンスを使用していることを確認する必要があるようです。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 に答える
2

詳細については、最初のコードを次のように置き換えることができます。

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

しかし、他の答えはあなたにメソッド全体を置き換える方法を与えます。

于 2012-06-29T12:51:33.577 に答える
2

なぜわざわざ、JTextComponents.write(Writer out)を使用するとIOExceptionwrite()がスローされます。これは、ネイティブOSからの改行、タブ、eiをかなり受け入れています。

于 2012-06-29T12:52:11.510 に答える
0

使用split

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