栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

java.io.FileNotFoundException:系统找不到指定的文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java.io.FileNotFoundException:系统找不到指定的文件

直接将word.txt作为项目根文件夹的子级和src的对等方放置

Project_Root    src    word.txt

免责声明:我想解释一下为什么这种方法适用于这种特殊情况,以及为什么它可能不适用于其他情况。

工作原理:

使用

File
或任何其他
FileXxx
变体时,你正在文件系统上相对于“工作目录”查找文件。工作目录,可以这样描述:

当你从命令行运行时

C:EclipseWorkspaceProjectRootbin > java com.mypackage.Hangman1

工作目录为

C:EclipseWorkspaceProjectRootbin
。使用你的IDE(至少是我使用过的所有IDE),工作目录为
ProjectRoot
。因此,当文件位于中时
ProjectRoot
,仅使用文件名作为相对路径是有效的,因为它位于工作目录的根目录中。

同样,如果这是你的项目结构

ProjectRootsrcword.txt
,则该路径
"src/word.txt"
将有效。

为什么它可能行不通

首先,工作目录可以随时更改。例如,像上面的示例一样从命令行运行代码,工作目录为bin。所以在这种情况下它将失败,因为没有

binword.txt

其次,如果要将项目导出到jar中,并且文件被配置为包含在jar中,则该文件也将失败,因为该路径也将不再有效。

话虽如此,你需要确定文件是否是嵌入式资源(或仅仅是“资源”-有时我会互换使用的术语)。如果是这样,那么你将需要将文件构建到类路径中,并通过URL访问它。在这种情况下,你需要做的第一件事是确保将文件构建到类路径中。将文件放在项目根目录中,你必须配置构建以包括该文件。但是,如果将文件放在下面的src或目录中,则默认构建应将其放在类路径中。

你可以通过多种方式访问​​类路径资源。你可以利用

Class
具有
getResourceXxx
方法的类,从中获取类路径资源。

例如,如果将项目结构更改为

ProjectRootsrcresourcesword.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")



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号