【问题标题】:Can't read a text file in java (consider as empty file)无法在 java 中读取文本文件(视为空文件)
【发布时间】:2018-08-10 14:54:38
【问题描述】:

我想为自己做一个应用程序,它可以告诉我我看过或没看过的电影。 第一个问题,在原型中,我有一个文本文件,其中放了一些电影的标题。 但是我使用的扫描仪只是认为文件是空的。 对我来说它应该可以工作,我不知道在哪里搜索。 谢谢你的帮助。 :)

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

    boolean trouve = false;
    System.out.println("Entrer le film a chercher");
    Scanner input = new Scanner(System.in);
    String word = input.nextLine();
    Scanner films = new Scanner(new File("C:/Films.txt"));

    while (films.hasNextLine() == true) {
        String line = films.nextLine();
        if (line.contains(word)) {
            trouve = true;
            System.out.println("ok");
        }
    }
    if (trouve) {
        System.out.println("Le film est présent");
    } else {
        System.out.println("Le film n'est pas présent");
    }
    System.out.println("Continuer ( entrer ) ou quitter");
    word = input.next();
}

【问题讨论】:

  • 你的 txt 文件是什么样子的?
  • 我尝试了自制的文本文件,它似乎工作。另一方面,我想指出您正在将真/假与真进行比较以获得真/假:v (films.hasNextLine() == true)
  • 在初始化扫描仪时确保文件名和目录正确
  • 我也测试了你的方法,它对我有用。也许尝试不同的路径(如桌面)并将您的文件移动到那里?
  • "films.hasNextLine() == true" 应该替换为 "films.hasNextLine()"。这不是问题,而是糟糕的风格。将布尔值与布尔值进行比较是没有意义的。

标签: java file text


【解决方案1】:

我这样做了:

import java.util.*;
import java.lang.*;
import java.io.*;

class HaveFile {
    public static void main(String[] args) {
        try {
            boolean trouve = false;
            System.out.println("Entrer le film a chercher");
            Scanner input = new Scanner(System.in);
            String word = input.nextLine();
            Scanner films = new Scanner(new File(args[0]));

            while (films.hasNextLine() == true) {
                String line = films.nextLine();
                if (line.contains(word)) {
                    trouve = true;
                    System.out.println("ok");
                }
            }
            if (trouve) {
                System.out.println("Le film est présent");
            } else {
                System.out.println("Le film n'est pas présent");
            }
            System.out.println("Continuer ( entrer ) ou quitter");
            word = input.next();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

它似乎工作得很好。我编译然后运行为:

java HaveFile HaveFile.java

当它提示时,我说“输入”,因为它出现在文本中。

我怀疑您的基本问题是您的文件实际上并不存在。你确定 C:/Films.txt 在那里吗?我使用的是 Mac,而不是 Windows,因此我无法评论其中特定于 Windows 的部分。

【讨论】:

  • 您对该文件存在的信心如何? Windows 机器上的正确文件格式是 C:/Filename 还是 C:\Filename?你可以做 File foo = new File("...") 然后 if (foo.exists()) 告诉你一些事情。你可以使用“C:/”作为你的文件并询问它是否是一个目录,然后查询其内容。
  • 您的解决方案可能有效,但不适用于我的计算机(很遗憾)。我检查了文件名和路径。我认为的问题是它没有进入while循环。
  • 您实际上是正确的,它是“C:\”,但问题仍然存在。我确实问过文件是否存在并且它存在目录也存在。
  • 如果它是 C:\,那么您在字符串中真正需要的是 C:\\Filename,因为第一个 \ 需要转义第二个 \。否则 C 将名称解释为 C: \F(无论 \F 在 C 字符串中可能是什么)文件名。
  • 好吧,我删除了我的文件并创建了一个新文件,现在它似乎可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多