Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我使用字符串作为文件名时,eclipse scanner filenotfoundexception_Java_Eclipse - Fatal编程技术网

Java 当我使用字符串作为文件名时,eclipse scanner filenotfoundexception

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中,没有任何东西可以工作。

作为一名CS学生,我一直在使用记事本。在记事本中,以下各项工作正常

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。但这听起来很合理。