我是java的新手,目前正在学习如何读取文件,完成工作,并将结果写入文件。我的代码可以无错运行,但我不知道为什么输出文件无法从控制台打印出来(它必须打印每行的最后一个单词)。任何人都可以指出我如何解决它使它工作? 非常感谢。 这是我的代码。
import javax.swing.JButton;
import javax.swing.JFileChooser;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class ReadingWriting {
private static BufferedReader reader;
private static BufferedWriter writer;
private static String currentLine;
private static String result;
public static void main(String[] arg) {
File inputFile=null;
JButton open= new JButton();
JFileChooser jfc = new JFileChooser();
jfc.setCurrentDirectory(new java.io.File("."));
jfc.setDialogTitle("ReadingWriting");
if (jfc.showOpenDialog(open) == JFileChooser.APPROVE_OPTION){
inputFile = jfc.getSelectedFile();
try {
reader = new BufferedReader(new FileReader(inputFile));
}catch (FileNotFoundException e){
System.out.println("The file was not found");
System.exit(0);
}
}
try {
Scanner input = new Scanner(inputFile);
while ((currentLine = reader.readLine()) != null){
currentLine = currentLine.trim();
String[] wordList = currentLine.split("\\s+");
String result =wordList[wordList.length-1];
System.out.println(result+"");
}
input.close();
reader.close();
}catch (IOException e2){
System.out.println("The file was not found");
System.exit(0);
}
try{
File outFile = new File("src/result.txt");
writer= new BufferedWriter(new FileWriter(outFile));
writer.write(result+"");
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输入文件(hello.txt):
你好世界
他是一个好孩子
345 123 46 765
输出文件(result.txt):
世界
男孩
765
我目前的result.txt文件:
空
答案 0 :(得分:1)
您的代码存在一些问题..
您创建了result
两次(一个类变量和一个局部变量)
private static String result;
...
String result =wordList[wordList.length-1];
就像EJP提到的那样。您的局部变量String result =wordList[wordList.length-1];
实际上会隐藏类变量result
。因此,一旦离开while循环的范围,数据实际上就会丢失。
在while循环之外,您正在访问仍为空的类变量resullt
。
您可以在阅读时写下结果:
while ((currentLine = reader.readLine()) != null){
currentLine = currentLine.trim();
String[] wordList = currentLine.split("\\s+");
String result =wordList[wordList.length-1];
writer.write(result); //write to file straight
}
或者,您可以先保存所有句子的最后一个单词,然后单独执行书写。用户Tima也提到了这一点:
ArrayList<String> resultList = new ArrayList<String>();
...
while ((currentLine = reader.readLine()) != null){
currentLine = currentLine.trim();
String[] wordList = currentLine.split("\\s+");
resultList.add(wordList[wordList.length-1]); //add to a list
}
...
//Perform your writing
for(String s : resultList)
writer.write(s);
答案 1 :(得分:0)
您已在此处创建结果作为临时变量。
String[] wordList = currentLine.split("\\s+");
String result = wordList[wordList.length - 1];
System.out.println(result + "");
您必须将所有读取行存储在数组中然后编写它 稍后到另一个档案。
或
你可以从一个文件中读取行,然后在其他文件中写入行。