为什么Scanner nextLine()读取一个文件但不读取同一目录中的另一个文件?

时间:2019-04-07 01:35:36

标签: java

我在目录中有两个文件。他们两个都有文本行。根据Notepad ++,每行都有一个CRLF。我的ReadFile类读取一个文件,而不读取另一个文件,而不读取另一个文件。

private FileRead fileRead = new FileRead();
private JobSiteData jobSiteData = new JobSiteData();
private String path = "C:/Users/Antonio/IdeaProjects/JobSearch/websiteTest/";

如果我取消注释该块并注释掉另一个块,则可以正常工作。

  @Test
    void setAllText_ItReturnsAllLinesFromSite_arrayListOfLinesFromSite() throws IOException {
    //        ArrayList<String> thisWorks = new ArrayList<>();
    //        thisWorks = fileRead.getLinesFromFile(path + "allTextTest.txt");
    //        for (String s : thisWorks) {
    //            System.out.println(s);
    //        }

        ArrayList<String> thisDoesntWork = new ArrayList<>();
        thisDoesntWork = fileRead.getLinesFromFile(path + "goDaddySplitTestAllLines.txt");
        for (String s : thisDoesntWork) {
            System.out.println(s); // prints "File is empty."
        }
    }

这是我的FileRead类。

public class FileRead {

    private String fileName;
    private ArrayList<String> linesFromFile = new ArrayList<>();
    private Scanner fileScanner;

    public ArrayList<String> getLinesFromFile(String fileName) {
        this.fileName = fileName;
        setLinesFromFile();
        if (isFileEmpty()) {
            linesFromFile.add("File is empty.");
        }
        return linesFromFile;
    }

    private void setLinesFromFile() {
        File file = new File(fileName);
        if (doesFileExist(file)) {
            readFile();
            closeFileReader();
        }
    }

    private Boolean doesFileExist(File file) {
        try {
            fileScanner = new Scanner(file);
        } catch (FileNotFoundException e) {
            linesFromFile.add("File does not exist.");
            return false;
        }
        return true;
    }

    private void readFile() {
        if (fileScanner != null) {
            if (!linesFromFile.isEmpty()) {
                linesFromFile.clear();
            }
            while (fileScanner.hasNextLine()) {
                linesFromFile.add(fileScanner.nextLine());
            }
        }
    }

    private void closeFileReader() {
        if (fileScanner != null) {
            fileScanner.close();
        }
    }

    private boolean isFileEmpty() {
        return linesFromFile.size() == 0;
    }
}

更新:我发现了问题。由于某种原因,文件中的这一行导致扫描仪无法读取这些行。

“ GoDaddy的Productivity产品套件可帮助数以百万计的小型企业运营和发展自己的业务。我们正在寻找一位对软件开发充满热情的工程师,以帮助加速我们的增长。如果您要在公共场合构建世界一流的体验,使用JavaScript和React的云基础架构,学习新知识并与一个有趣的团队合作,我们希望与您见面!”

此行是第四行。如果删除它及其后的所有内容,则扫描仪工作正常。如果我删除文件中的所有内容,而仅将文件中的这一行作为第一行,那么它也将无法工作。有人知道为什么吗?

0 个答案:

没有答案