这不是我的代码不起作用,但我怀疑它是否非常高效。我的理论是,它不是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.
}
}
}
答案 0 :(得分: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(); }
}
答案 1 :(得分:2)
有关信息,第一个代码可以替换为:
List<String> log = Arrays.asList(logTextArea.getText().split("\n"));
但其他答案为您提供了替换整个方法的方法。
答案 2 :(得分:2)
为什么要打扰,使用JTextComponents.write(Writer out) throws IOExceptionwrite()这是非常接受换行符,标签,e.i。来自Native OS
答案 3 :(得分:0)
使用split
:
String[] log = s.split("\n");