我有一段代码,可以将文件从文件打印到名为textArea的JTextArea。
不幸的是,我正在使用的方法逐行(不理想),所以我必须附加一行\ n
现在这很好,但最后会创建一个新行。
我的代码如下:
class menuOpen implements ActionListener {
public void actionPerformed(ActionEvent e)
{
try {
File filePath = new File("c:\\test.txt");
FileInputStream file = new FileInputStream(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(file));
String displayText;
while ((displayText = br.readLine()) != null) {
textArea.append(displayText + "\n");
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
任何人都可以帮助我摆脱最后一行吗?
答案 0 :(得分:6)
怎么样:
text.substring(0,text.lastIndexOf('\n'));
答案 1 :(得分:4)
(...)
FileReader r= new FileReader(filePath);
StringBuilder b=new StringBuilder();
int n=0;
char array[]=new char[1024];
while((n=r.read(array))!=-1) b.append(array,0,n);
r.close();
String content=b.toString();
textArea.setText(content.substring(0,content.lengt()-1);
(...)
答案 2 :(得分:4)
另一个想法:
boolean firstLine = true;
while ((displayText = br.readLine()) != null) {
if (firstLine) {
firstLine = false;
} else {
textArea.append("\n");
}
textArea.append(displayText);
}
我们的想法是在显示新行之前附加换行符 ,除了文件的第一行。
答案 3 :(得分:2)
最简单的方法是不使用BufferedReader.readLine()
。例如:
BufferedReader in = new BufferedReader(new FileReader(filePath));
char[] buf = new char[4096];
for (int count = in.read(buf); count != -1; count = in.read(buf)) {
textArea.append(new String(buf, 0, count));
}
修改
我之前应该已经看过了,但更好的方法是让JTextArea读取文件:
BufferedReader in = new BufferedReader(new FileReader(filePath));
textArea.read(in, null);
这仍然会在最后的换行符中读取,但它会标准化文本中的所有行结尾(请参阅javadocs for DefaultEditorKit
以获取有关如何处理行结尾的说明)。所以你可以用这样的东西摆脱尾随的换行符:
// line endings are normalized, will always be "\n" regardless of platform
if (textArea.getText().endsWith("\n")) {
Document doc = ta.getDocument();
doc.remove(doc.getLength() - 1, 1);
}
答案 4 :(得分:1)
怎么样
if (textArea.length > 0) textArea.Text = textArea.Text.Substring(0 ,textArea.Text.Length - 1)
答案 5 :(得分:1)
显然你想要两行之间的换行符,而不是每行行后的。这意味着你应该至少有两行:
if (d = br.readLine()) != null ) {
textArea.append(displayText);
while (d = br.readLine()) != null ) {
textArea.append( "\n" + displayText);
}
}
当然,它看起来更复杂。那是因为'之间' 比'之后'更复杂。
答案 6 :(得分:1)
在你的循环中:
while ((displayText = br.readLine()) != null) {
if (textArea.length() > 0)
textArea.append("\n");
textArea.append(displayText);
}
即。如果您的textarea中已有一些文字,请插入换行符。
答案 7 :(得分:1)
非常简单..你只需稍微调整你的代码。
String displayText = br.readLine();
textArea.append(displayText);
while ((displayText = br.readLine()) != null) {
textArea.append("\n" + displayText);
}
我相信这段代码能以最低的成本产生您想要的功能。