2016-11-19 150 views
0

我的目标是最终制作一个拼写检查器,但我需要一个单词词典来做到这一点。阅读txt文件和编写词典

这里我试图让用户输入任意数量的文本文件,只要文件名之间有一个空格(“novel1.txt novel2.txt novel3.txt”)。

我将使用这些小说中的每个单词写入单个单词(即单词词典)中单个单词的.dat文件。但是,即使我知道我有该文件,但我仍在Scanner read = new Scanner(new File(filenames[i]));处发现文件未找到错误。

我甚至试图把它放在源码包中,以确保它可以被发现。

在我的代码最底层是一个我跑过的小测试(首先注释掉其他代码),它确实打印出“war.txt不是文件”,尽管我可以清楚地看到我有txt文件并输入正确。

有人可以告诉我为什么java没有看到我的txt文件或者可能不认为这是一个正常的文件?

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

    Scanner in = new Scanner(System.in); 

    System.out.println("Please enter the file names exactly."); 

    String userInput = in.nextLine(); 
    String[] filenames = userInput.split(" "); // turning user input string into a string array so I can look at each string individually 

    // takes each individual string from filenames and turns each one into the file 
    // that the string should represent then adds the file's contents to my dictionary 
    for(int i = 0; i < filenames.length; i++){ 
     Scanner read = new Scanner(new File(filenames[i])); 
     String word = null; 
     while(read.hasNext()){ 
      if(read.next().length() >= 2){ 
       word = read.next(); 
       // write word into myDict.dat 
      } 
      System.out.println(word); 
     } 
    } 
    File war = new File("war.txt"); 
    if(!war.isFile()){ 
     System.out.println(war + " isn't a file."); 
    } 
} 
+0

你如何运行你的代码?你的'class'和你的'txt'文件在哪个目录中?有没有一样的? – SubOptimal

+0

只是一个输入建议:尝试读取行,直到终端行,例如''结束'',它会使文件更容易输入空格等等(你可以疯狂地做些事情,比如子串和引用/解析等等,但这会更简单) – Rogue

+0

@SubOptimal我已经把txt文件与我的程序在同一个目录中。 –

回答

0

我相信你做错了一些事情。尝试下面的例子,并将其与实际文件位置进行比较。

Demo.java

import java.io.*; 
class Demo { 
    public static void main(String[] args) throws IOException { 
     File war = new File("war.txt"); 
     if(!war.isFile()){ 
      System.out.println(war + " isn't a file."); 
     } else { 
      System.out.println(war + " is a file."); 
     } 
    } 
} 

编译并运行它

javac Demo.java 
java Demo 

输出

war.txt isn't a file. 

现在在同一个目录中war.txt

创建0
echo "foobar" > war.txt 

运行代码再次

java Demo 

输出

war.txt is a file. 
+0

我没有得到相同的输出。 war.txt和我的演示类在同一个目录下。 –

+0

@CodyWinter你有没有像在答案中提到的那样执行该示例?那么你应该得到相同的结果。 Othwerise向您的问题添加了哪些文件位于哪个目录中。你在哪个目录下执行哪个命令。 – SubOptimal

0

对于FileNotFoundException确保文件在类路径中,如果只插入文件名(例如,如果你使用Eclipse放该项目的根文件夹中的文件)。

对于war.txt问题,你应该这样做:

File war = new File("war.txt"); 
if (!war.exists()) { 
    war.createNewFile(); 
} 
if(!war.isFile()){ 
    System.out.println(war + " isn't a file."); 
} 

这是因为当你做File war = new File("war.txt");没有创建该文件,你必须与war.createNewFile();可明确创建它。

最后,这里要注意:

if(read.next().length() >= 2){ 
    word = read.next(); 
    // write word into myDict.dat 
} 
System.out.println(word); 

你做两次read.next()没有检查read.hasNext()第二次。你应该这样写:

while(read.hasNext()){ 
    String next = read.next(); 
    if(next.length() >= 2){ 
     word = next; 
     // write word into myDict.dat 
    } 
    System.out.println(word); 
} 
+0

我不想创建一个文件“war.txt”。该文件已存在。我试图从现有的war.txt文件中收集这些单词。我误解了什么方法.createNewFile();呢? –

+0

好吧,我的坏,我没有意识到war.txt文件是什么..我认为你只有一个类路径问题..如果你使用eclipse,你应该把你的文件放在你的项目的根目录。如果您使用java命令运行程序,则应该将classpath选项添加到放置文件的文件夹中。 – user6904265

+0

感谢您的建议,但我使用netbeans。我已经尝试将源文件包中使用的txt文件与我的源代码一起放置,但它仍然不起作用。 –