文件是否存在于Java中?

文件是否存在于Java中?,java,file,Java,File,我正在尝试检查给定目录位置是否存在文件 File seacrhFile = new File("D:/input", contract.conf); if (seacrhFile.exists()) { returnFile = seacrhFile; } else { System.out.println("No such file exists"); } reutrn returnFile; 这在D:/input目录场景中工作,但是如果我将目录位置更改为src/test/resou

我正在尝试检查给定目录位置是否存在文件

File seacrhFile = new File("D:/input", contract.conf);
if (seacrhFile.exists()) {
  returnFile = seacrhFile;
} else {
  System.out.println("No such file exists");
}
reutrn returnFile;

这在
D:/input
目录场景中工作,但是如果我将目录位置更改为
src/test/resources/input
文件夹,那么我将得到
不存在这样的文件,即使该文件存在。

如果您想访问
src/测试/资源/输入
你可能应该使用

System.getProperty("user.dir") + File.separator + "src/test/resources/input"
因为系统属性“user.dir”指向projectlocation

File seacrhFile = new File("D:/input", contract.conf);
if (seacrhFile.exists()) {
  returnFile = seacrhFile;
} else {
  System.out.println("No such file exists");
}
reutrn returnFile;
如果您只使用“src/test/resources/input”,您将得到您提到的异常,因为文件对象不在项目位置“启动”。因此,您必须手动指定它

不过,最好使用getResource方法在项目中检索不同的资源,因为如果使用jar文件运行项目,则需要调整以使“user.dir”正常工作

这只是Classloader的一个基本示例:

ClassLoader.getSystemClassLoader().getResource("test/resources/input");
这将返回一个URL对象,使用此对象可以使用

URL filePath =  ClassLoader.getSystemClassLoader().getResource("test/resources/input");
File file = new File( filePath.toURI() );

请删除src并重试

将dir位置更改为src//test//resources//input,并查看它是否工作
src/test/resources/input
是一个相对路径。JVM必须在
src
的父目录中执行才能正常工作。请尝试以下操作(新文件(getClass().getResource(“/src/test/resources/input”).toURI());这应该行得通。您可能需要对文件名进行实验。您正在描述Maven项目中的单元测试吗?我这样问是因为布局“src/test/resources”在Maven中很常用。文件布局表明Maven可能正在使用。如果是这样的话,那么在单元测试运行时需要记住使用的各种类加载器。有关为什么
getClass().getClassLoader().getResource()
可能更好的解释,请参阅。