侃侃尔雅
将Wordd.txt直接放置为项目根文件夹的子文件夹和src的对等方Project_Root
src
word.txt免责声明:我想解释一下为什么这在这个特殊的情况下有效,为什么它可能不适用于其他人。其工作原理:当你使用File或者其他任何一个FileXxx变量,您正在寻找文件系统上相对于“工作目录”..工作目录,可以描述为:当您从命令行运行时C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1工作目录是C:\EclipseWorkspace\ProjectRoot\bin..对于IDE(至少所有我曾经使用过的IDE),工作目录是ProjectRoot..因此,当文件位于ProjectRoot,然后只使用文件名作为相对路径是有效的,因为它位于工作目录的根目录。同样,如果这是您的项目结构ProjectRoot\src\word.txt,然后是那条路"src/word.txt"都是有效的。为什么它不起作用例如,工作目录总是可以更改的。例如,在上面的示例中从命令行运行代码时,工作目录是bin..因此,在这种情况下,它将失败,因为没有bin\word.txt其次,如果要将该项目导出到JAR中,并且将该文件配置为包含在JAR中,它也将失败,因为路径也将不再有效。尽管如此,您需要确定该文件是否为嵌入式资源(或者仅仅是“资源”-有时我会交替使用的术语)。如果是这样,那么您将希望将文件构建到类路径中,并通过URL访问它。第一件您需要做的事情(在这种特殊情况下)是确保文件建好进入类路径。使用项目根目录中的文件,必须将生成配置为包含该文件。但如果您将文件放入src或者在下面的某个目录中,默认构建应该将其放到类路径中。您可以通过多种方式访问类路径资源。您可以使用Class类的getResourceXxx方法,用于获取类路径资源。例如,如果将项目结构更改为ProjectRoot\src\resources\word.txt,你可以用这个:InputStream is = Hangman1.class.getResourceAsStream("/resources/word.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));getResourceAsStream返回InputStream,但是在引擎盖下获得一个URL。或者,你可以得到一个URL如果你需要的话。getResource()将返回一个URL对于Maven用户,目录结构如下src/main/resources的内容resources文件夹放在类路径的根目录下。因此,如果其中有一个文件,那么您将只使用getResourceAsStream("/thefile.txt")