Javaで読み込むために開く前に、ファイルが存在するかどうかを確認するにはどうすればよいですか。 (Perlの-e $filename
と同等).
唯一の SO に関する同様の質問は、ファイルの書き込みを扱っているため、FileWriterを使用して回答されましたが、明らかにここでは適用されません。
可能であれば、「ファイルを開いてテキスト内で「ファイルなし」をチェックする例外が発生したときにキャッチするためのAPIの呼び出し」とは対照的に、true/falseを返す本物のAPI呼び出しをお勧めします。後者。
Java.io.File
:を使う
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) {
// do something
}
isFile()
の代わりにexists()
を使うことをお勧めします。ほとんどの場合、パスがファイルを指しているかどうかだけでなく、そのパスがファイルを指しているかどうかを確認します。パスがディレクトリを指す場合、exists()
はtrueを返すことを忘れないでください。
new File("path/to/file.txt").isFile();
new File("C:/").exists()
はtrueを返しますが、ファイルとして開いたり読み込んだりすることはできません。
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を返す場合、ファイルの存在は確認できません。 (おそらくこの道へのアクセス権なし)
パスがディレクトリか通常のファイルかを確認できます。
if (Files.isDirectory(path)) {
// path is directory
}
if (Files.isRegularFile(path)) {
// path is regular file
}
Java SE 7チュートリアル をチェックしてください。
Java 8を使用する場合
if(Files.exists(Paths.get(filePathString))) {
// do something
}
File f = new File(filePathString);
これは物理ファイルを作成しません。 Fileクラスのオブジェクトを作成するだけです。ファイルを物理的に作成するには、明示的に作成する必要があります。
f.createNewFile();
そのため、f.exists()
を使用して、そのようなファイルが存在するかどうかを確認できます。
f.isFile() && f.canRead()
以下を使用することができます: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 "));
}
}
これを実現するには複数の方法があります。
存在のためだけの場合。ファイルでもディレクトリでもかまいません。
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
しないでください。 FileNotFoundException.
をキャッチするだけです。ファイルシステムは、ファイルが存在するかどうかをテストする必要があります。これらすべてを2回行うことには意味がありません。
システムを考え直そうとしないでください。それは知っています。そして未来を予測しようとしないでください。一般的に any リソースが利用可能かどうかをテストする最良の方法はそれを使うことです。
私にとっては、Sean A.Oによって受け入れられた回答の組み合わせです。ハーニーとその結果Cort3zによるコメントが最善の解決策のようです。
次のスニペットを使用しました:
File f = new File(filePathString);
if(f.exists() && f.isFile()) {
//do something ...
}
これが誰かに役立つことを願っています。
Commons FileUtils https://commons.Apache.org/proper/commons-io/javadocs/api-2.5/org/Apache/commons/io/FileUtils.html [。 ]これにはファイルを管理するための追加の方法があり、多くの場合JDKより優れています。
私はこのスレッドが少し遅れていることを知っています。しかし、これが私の答えです。Java7以降で有効です。
次のスニペット
if(Files.isRegularFile(Paths.get(pathToFile))) {
// do something
}
fileが存在しない場合、メソッドisRegularFile
はfalse
を返すので、これは完全に満足できるものです。したがって、Files.exists(...)
かどうかをチェックする必要はありません。
他のパラメータは、リンクの処理方法を示すオプションです。デフォルトでは、シンボリックリンクがたどられます。
たとえば、ファイルディレクトリがあり、それが存在するかどうかを確認したい場合
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
をチェックしたい場合はdir
String directoryPath = dir.getAbsolutePath()
boolean check = new File(new File(directoryPath), aFile.getName()).exists();
そしてcheck
の結果をチェックする
ファイルが存在するかどうかをチェックするFile.exists()
は、チェック操作ステータスを示すブール値を返します。ファイルが存在する場合はtrue。存在しない場合はfalseです。
File f = new File("c:\\test.txt");
if(f.exists()){
System.out.println("File existed");
}else{
System.out.println("File not found!");
}
new File("/path/to/file").exists();
トリックをします
StringではFileコンストラクターを使用しないでください。
これはうまくいかないかもしれません!
この代わりに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
}
これらのメソッドを設計する特定の目的があります。ファイルの存在を確認するために誰かを使用することはできません。