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 + "");

您必须将所有读取的行存储在数组中然后写入它 稍后到另一个文件。

您可以从一个文件中读取行,然后紧接着在另一个文件中写入行。

您的代码存在一些问题..

  1. 您创建了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,它仍然是空的。


  1. 目前您的 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);