Java。缓冲区写入器
Java. BufferWriter
我是 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 文件:
无
您已在此处创建了一个 result 作为临时变量。
String[] wordList = currentLine.split("\s+");
String result = wordList[wordList.length - 1];
System.out.println(result + "");
您必须将所有读取的行存储在数组中然后写入它
稍后到另一个文件。
或
您可以从一个文件中读取行,然后紧接着在另一个文件中写入行。
您的代码存在一些问题..
您创建了result
两次(一个class变量和一个局部变量)
private static String result;
...
String result =wordList[wordList.length-1];
就像EJP说的一样。 String result =wordList[wordList.length-1];
的局部变量实际上隐藏了 class 变量 result
。因此,一旦离开 while 循环的范围,数据实际上就会丢失。
在 while 循环之外,您正在访问 class 变量 resullt
,它仍然是空的。
- 目前您的 while 循环只会存储文本文件中最后一句话的最后一个词。
你可以边看边写结果:
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);
我是 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 文件:
无
您已在此处创建了一个 result 作为临时变量。
String[] wordList = currentLine.split("\s+");
String result = wordList[wordList.length - 1];
System.out.println(result + "");
您必须将所有读取的行存储在数组中然后写入它 稍后到另一个文件。
或
您可以从一个文件中读取行,然后紧接着在另一个文件中写入行。
您的代码存在一些问题..
您创建了
result
两次(一个class变量和一个局部变量)private static String result; ... String result =wordList[wordList.length-1];
就像EJP说的一样。 String result =wordList[wordList.length-1];
的局部变量实际上隐藏了 class 变量 result
。因此,一旦离开 while 循环的范围,数据实际上就会丢失。
在 while 循环之外,您正在访问 class 变量 resullt
,它仍然是空的。
- 目前您的 while 循环只会存储文本文件中最后一句话的最后一个词。
你可以边看边写结果:
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);