为什么Scanner的hasNext()方法最初为非空文本文件返回false?

时间:2014-01-25 17:31:36

标签: java file-io

我正在尝试将一些文字写入文件。我有一个while循环,它应该只需要一些文本并将完全相同的文本写回文件。

我发现永远不会输入while循环,因为Scanner认为没有更多文本可供阅读。但是有。

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class WriteToFile {

    public static void main(String[] args) throws FileNotFoundException {

        String whatToWrite = "";

        File theFile = new File("C:\\test.txt");

        Scanner readinput = new Scanner(theFile);

        PrintWriter output = new PrintWriter(theFile);

        while (readinput.hasNext()) { //why is this false initially?

            String whatToRead = readinput.next();

            whatToWrite = whatToRead;

            output.print(whatToWrite);
        }

        readinput.close();
        output.close();

    }

}

文本文件只包含随机单词。狗,猫等

当我运行代码时,text.txt变为空。

有一个类似的问题:https://stackoverflow.com/questions/8495850/scanner-hasnext-returns-false指出了编码问题。我使用Windows 7和美国语言。我能以某种方式找出文本文件的编码方式吗?

更新

事实上,正如Ph.Voronov评论的那样,PrintWriter系列会删除文件内容! user2115021是正确的,如果你使用PrintWriter,你不应该在一个文件上工作。不幸的是,对于我必须解决的任务,我不得不使用单个文件。这是我做的:

import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class WriteToFile {

    public static void main(String[] args) throws FileNotFoundException {

        ArrayList<String> theWords = new ArrayList<String>();

        File theFile = new File("C:\\test.txt");

        Scanner readinput = new Scanner(theFile);

        while (readinput.hasNext()) {

            theWords.add(readinput.next());

        }

        readinput.close();

        PrintWriter output = new PrintWriter(theFile); //we already got all of
            //the file content, so it's safe to erase it now

        for (int a = 0; a < theWords.size(); a++) {
            output.print(theWords.get(a));
            if (a != theWords.size() - 1) {
                output.print(" ");
            }
        }

        output.close();

    }

}

2 个答案:

答案 0 :(得分:9)

PrintWriter output = new PrintWriter(theFile);

它会删除您的文件。

答案 1 :(得分:1)

您正在尝试使用SCANNER读取文件并使用PRINTWRITER写入另一个文件,但两者都在同一个文件上工作.PRINTWRITER清除文件的内容以写入内容。类需要处理不同的文件。