在打开文件以Java读取之前,如何检查文件是否存在(相当于Perl的文件
-e $filename
)?
关于SO的唯一类似问题是写文件,因此得到了回答FileWriter
,显然在这里不适用。
如果可能的话,我宁愿使用真正的API调用返回true / false,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查'无文件'的情况下捕获”,但是我可以接受后者。
在打开文件以Java读取之前,如何检查文件是否存在(相当于Perl的文件
-e $filename
)?
关于SO的唯一类似问题是写文件,因此得到了回答FileWriter
,显然在这里不适用。
如果可能的话,我宁愿使用真正的API调用返回true / false,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查'无文件'的情况下捕获”,但是我可以接受后者。
Answers:
使用java.io.File
:
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) {
// do something
}
if(f.isFile())
代替。
我建议使用isFile()
代替exists()
。大多数时候,您都希望检查路径是否不仅指向文件而且还指向文件。请记住,exists()
如果您的路径指向目录,它将返回true。
new File("path/to/file.txt").isFile();
new File("C:/").exists()
将返回true,但不允许您以文件形式打开和读取文件。
/path
,new File("file.txt").exists()
将返回true
如果正确的完整路径是/path/to/file.txt
,答案是一大禁忌(除非另一个文件/path/file.txt
存在)。
通过在Java SE 7中使用nio,
import java.nio.file.*;
Path path = Paths.get(filePathString);
if (Files.exists(path)) {
// file exist
}
if (Files.notExists(path)) {
// file is not exist
}
如果两个exists
和notExists
返回false,该文件的存在,无法验证。(也许没有访问权限)
您可以检查path
是目录还是常规文件。
if (Files.isDirectory(path)) {
// path is directory
}
if (Files.isRegularFile(path)) {
// path is regular file
}
请检查此Java SE 7教程。
java.nio.file.Files.exists()
是很多快于java.io.File.exists()
(从我的唯一的计算机上的小基准我测试:在Windows Server 2012上运行Java 1.7.0_45 64位)。
java.nio.file.Files.exists()
5倍。(Win7 Java 1.7.0_79-x86)java.io.File.exists
使用Java 8:
if(Files.exists(Paths.get(filePathString))) {
// do something
}
Files.exists()
有两个参数。通常,您会需要Files.exists(path, LinkOption.NOFOLLOW_LINKS )
。
有多种方法可以实现此目的。
如果只是为了生存。它可以是文件或目录。
new File("/path/to/file").exists();
检查文件
File f = new File("/path/to/file");
if(f.exists() && f.isFile()) {}
检查目录。
File f = new File("/path/to/file");
if(f.exists() && f.isDirectory()) {}
Java 7方式。
Path path = Paths.get("/path/to/file");
Files.exists(path) // Existence
Files.isDirectory(path) // is Directory
Files.isRegularFile(path) // Regular file
Files.isSymbolicLink(path) // Symbolic Link
您可以使用以下内容: File.exists()
在Google上首次匹配“ java文件存在”:
import java.io.*;
public class FileTest {
public static void main(String args[]) {
File f = new File(args[0]);
System.out.println(f + (f.exists()? " is found " : " is missing "));
}
}
String.valueOf()
处理空值的
别。只需捕获FileNotFoundException.
文件系统就必须测试文件是否仍然存在。重复两次都是没有意义的,有几个原因不这样做,例如:
不要试图猜测系统。它知道。并且不要试图预测未来。通常,测试任何资源是否可用的最佳方法就是尝试使用它。
我知道我在这个话题中有点晚了。但是,这是我的答案,从Java 7起有效。
以下代码段
if(Files.isRegularFile(Paths.get(pathToFile))) {
// do something
}
非常令人满意,因为如果文件不存在,则方法isRegularFile
返回false
。因此,无需检查Files.exists(...)
。
请注意,其他参数是指示应如何处理链接的选项。默认情况下,遵循符号链接。
Files.notExists
,Files.isDirectory
而Files.isRegularFile.
这最好的选择是:path.toFile().exists()
这也是很值得在熟悉了共享文件实用程序https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html 这对管理文件和其他方法通常比JDK好。
例如,如果您有文件目录,并且想要检查它是否存在
File tmpDir = new File("/var/tmp");
boolean exists = tmpDir.exists();
exists
如果文件不存在,将返回false
来源:https : //alvinalexander.com/java/java-file-exists-directory-exists
具有良好编码实践并涵盖所有情况的简单示例:
private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
if (f.exists()) {
throw new FileAlreadyExistsException(f.getAbsolutePath());
} else {
try {
URL u = new URL(url);
FileUtils.copyURLToFile(u, f);
} catch (MalformedURLException ex) {
Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
参考和更多示例
https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsexception-implementations
不要将File构造函数与String一起使用。
这可能行不通!
而不是使用URI:
File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) {
// to do
}
您可以使用以下代码进行检查:
import java.io.File;
class Test{
public static void main(String[] args){
File f = new File(args[0]); //file name will be entered by user at runtime
System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise
if(f.exists())
{
//executable code;
}
}
}
你可以这样
import java.nio.file.Paths;
String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
//...do somethinh
}
File.is Exist()
或Files.isRegularFile()
在JDK 8
设计这些方法有特定的目的。我们不能说使用任何人来检查文件是否存在。
要检查文件是否存在,只需导入java.io. *库
File f = new File(“C:\\File Path”);
if(f.exists()){
System.out.println(“Exists”); //if file exists
}else{
System.out.println(“Doesn't exist”); //if file doesn't exist
}
资料来源:http : //newsdivariotipo.altervista.org/java-come-controllare-se-un-file-esiste/
canRead
,canWrite
以及canExecute
以检查。