Java的。 BufferWriter

时间:2017-08-25 17:41:15

标签: java file bufferedreader bufferedwriter

我是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文件:

2 个答案:

答案 0 :(得分:1)

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

  1. 您创建了result两次(一个类变量和一个局部变量)

    private static String result;
    ...
    String result =wordList[wordList.length-1];
    
  2. 就像EJP提到的那样。您的局部变量String result =wordList[wordList.length-1];实际上会隐藏类变量result。因此,一旦离开while循环的范围,数据实际上就会丢失。

    在while循环之外,您正在访问仍为空的类变量resullt

    1. 目前你的while循环只存储文本文件中最后一个句子的最后一个单词。
    2. 您可以在阅读时写下结果:

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

您必须将所有读取行存储在数组中然后编写它 稍后到另一个档案。

你可以从一个文件中读取行,然后在其他文件中写入行。