Java 当我使用字符串作为文件名时,eclipse scanner filenotfoundexception
作为一名CS学生,我一直在使用记事本。在记事本中,以下各项工作正常Java 当我使用字符串作为文件名时,eclipse scanner filenotfoundexception,java,eclipse,Java,Eclipse,作为一名CS学生,我一直在使用记事本。在记事本中,以下各项工作正常 class someclass { public static void main(String[] args) throws Exception{ Scanner in = new Scanner(new File("some.txt")); } } 在netbeans中,我必须使用“”中包含的实际完整路径,并将代码放入try-catch中 然而,在eclipse中,没有任何东西可以工作。
class someclass {
public static void main(String[] args) throws Exception{
Scanner in = new Scanner(new File("some.txt"));
}
}
在netbeans中,我必须使用“”中包含的实际完整路径,并将代码放入try-catch中
然而,在eclipse中,没有任何东西可以工作。如果在“”中使用完整路径名,则会出现转义序列错误。如果我只是使用上面列出的代码,使用try-catch和.close(),我仍然会得到filenotfound…请建议
ps,为了我自己的启发,为什么我不必关闭或使用记事本中的try catch
为什么我不必关闭或使用记事本中的try catch
从理论上讲,您也不需要在IDE中这样做,但IDE比编译器更深入,并警告您非封闭资源等;如果您的IDE配置为这样,则此类警告可能会成为错误。至于try
/catch
这看起来很奇怪,因为您将main
声明为抛出异常
但是IDE在这里有一点是正确的:当您打开一个可关闭的
资源时,您应该.close()
完成它
如果在“”中使用完整路径名,则会出现转义序列错误
胡乱猜测:使用Windows,在两个引号之间直接粘贴一个路径,如C:\myfile.txt
。这确实是一个格式错误的字符串:Java字符串中的反斜杠需要加倍
我必须使用包含在“”中的实际完整路径
这意味着进程的工作目录不是您认为的位置。通常,在IDE中,工作目录是项目根目录。将文件移动到此工作目录或使用完整路径
在记事本中,以下各项工作正常
考虑一下如何运行代码。我可能在做假设,但我相信是这样的
javac -cp . Someclass.java
java SomeClass
您的目录结构如下所示
javac -cp . Someclass.java
java SomeClass
*请注意/someTestproject是我为这个示例编写的目录
当应用程序运行时,它会查找与其执行路径相关的资源。在您从命令行运行的情况下,它会查找相对于您所在目录的some.txt(在本例中为/someTestProject)
然而,在IDE世界中,事情并不是那么简单。源文件夹永远不是生成和运行文件夹。因此,如果在项目的源文件夹中有some.txt,则在运行时很可能找不到它。下面说明了大多数IDE是如何工作的
/workspace/project/src
/workspace/project/class
其中../src是所有java文件所在的位置,/class是所有编译类所在的位置
有几种方法可以解决这个问题,但它们因您使用的IDE而异。我本人已经有一段时间没有使用netbeans了,但我相信您可以在项目设置中找到您的执行目录。在eclipse中,您可以简单地将文件拖到项目中,但拖到src文件夹之外
在netbeans中,我必须使用“”中包含的实际完整路径,并将
代码也在try-catch中
打开文件some.txt时,资源位于运行时。Scanner类声明,如果找不到文件,它将抛出FileNotFoundException。您应该在try/catch中处理这个问题,以优雅地退出,或者声明main抛出一个FileNotFoundException,当它发生时会导致程序崩溃
然而,在eclipse中,没有任何东西可以工作。如果我使用完整路径
“”中的名称它给了我一个转义序列错误
我猜你在用windows。请记住,在Java字符串中,反斜杠\是转义字符。山姆说,想一想\n(换行符)\t(制表符)或如何在字符串“Hello”中加引号
如果你尝试以下方法,它将失败
Scanner sc = new Scanner(new File("C:\Users\you\Desktop\some.txt"));
在windows上,您应该使用
Scanner sc = new Scanner(new File("C:\\Users\\you\\Desktop\\some.txt"));
请记住,要在字符串中包含反斜杠,必须使用两个反斜杠
为了我自己的启发,为什么我不必关闭或使用try catch in
记事本
由于您的异常是在main中抛出的,因此不需要在try/catch中声明或包装。但是,IDE尝试实施良好的编程实践。我相信大多数IDE都有一个设置,允许您控制IDE在编程实践中抱怨的程度。您的“some.txt”在哪里“定位?请尝试打印出Java正在使用的工作目录。这可能不是你所期望的System.getProperty(“user.dir”)
当您说项目根目录时,是指\workspace\project\mytxt还是\project\mytext。我需要用“\”来引导吗?也许。。。我不使用Eclipse或NetBeans,而是使用IDEA。但这听起来很合理。