How to detect if a file(with any extension) exist in java
Solution 1
This code will do the trick..
public static void listFiles() {
File f = new File("C:/"); // use here your file directory path
String[] allFiles = f.list(new MyFilter ());
for (String filez:allFiles ) {
System.out.println(filez);
}
}
}
class MyFilter implements FilenameFilter {
@Override
//return true if find a file named "a",change this name according to your file name
public boolean accept(final File dir, final String name) {
return ((name.startsWith("a") && name.endsWith(".jpg"))|(name.startsWith("a") && name.endsWith(".txt"))|(name.startsWith("a") && name.endsWith(".mp3")|(name.startsWith("a") && name.endsWith(".mp4"))));
}
}
Above code will find list of files which has name a.
I used 4 extensions here to test(.jpg,.mp3,.mp4,.txt).If you need more just add them in boolean accept()
method.
EDIT :
Here is the most simplified version of what OP wants.
public static void filelist()
{
File folder = new File("C:/");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles)
{
if (file.isFile())
{
String[] filename = file.getName().split("\\.(?=[^\\.]+$)"); //split filename from it's extension
if(filename[0].equalsIgnoreCase("a")) //matching defined filename
System.out.println("File exist: "+filename[0]+"."+filename[1]); // match occures.Apply any condition what you need
}
}
}
Output:
File exist: a.jpg //These files are in my C drive
File exist: a.png
File exist: a.rtf
File exist: a.txt
File exist: a.mp3
File exist: a.mp4
This code checks all the files of a path.It will split all filenames from their extensions.And last of all when a match occurs with defined filename then it will print that filename.
Solution 2
If you're looking for any file with name "a"
regardless of the suffix, the glob that you're looking for is a{,.*}
. The glob is the type of regular expression language used by shells and the Java API to match filenames. Since Java 7, Java has support for globs.
This Glob explained
-
{}
introduces an alternative. The alternatives are separated with,
. Examples:-
{foo,bar}
matches the filenamesfoo
andbar
. -
foo{1,2,3}
matches the filenamesfoo1
,foo2
andfoo3
. -
foo{,bar}
matches the filenamesfoo
andfoobar
- an alternative can be empty. -
foo{,.txt}
matches the filenamesfoo
andfoo.txt
.
-
-
*
stands for any number of characters of any kind, including zero characters. Examples:-
f*
matches the filenamesf
,fa
,faa
,fb
,fbb
,fab
,foo.txt
- every file that's name starts withf
.
-
- The combination is possible.
a{,.*}
is the alternativesa
anda.*
, so it matches the filenamea
as well as every filename that starts witha.
, likea.txt
.
A Java program that lists all files in the current directory which have "a"
as their name regardless of the suffix looks like this:
import java.io.*;
import java.nio.file.*;
public class FileMatch {
public static void main(final String... args) throws IOException {
try (final DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("."), "a{,.*}")) {
for (final Path entry : stream) {
System.out.println(entry);
}
}
}
}
or with Java 8:
import java.io.*;
import java.nio.file.*;
public class FileMatch {
public static void main(final String... args) throws IOException {
try (final DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("."), "a{,.*}")) {
stream.forEach(System.out::println);
}
}
}
If you have the filename in a variable and you want to see whether it matches the given glob, you can use the FileSystem.getPathMatcher()
method to obtain a PathMatcher
that matches the glob, like this:
final FileSystem fileSystem = FileSystems.getDefault();
final PathMatcher pathMatcher = fileSystem.getPathMatcher("glob:a{,.*}");
final boolean matches = pathMatcher.matches(new File("a.txt").toPath());
Related videos on Youtube
user2511713
Updated on October 17, 2022Comments
-
user2511713 over 1 year
I am searching for a sound file in a folder and want to know if the sound file exist may it be .mp3,.mp4,etc.I just want to make sure that the filename(without extension) exists.
eg.File searching /home/user/desktop/sound/a
return found if any of a.mp3 or a.mp4 or a.txt etc. exist.
I tried this:
File f=new File(fileLocationWithExtension); if(f.exist()) return true; else return false;
But here I have to pass the extension also otherwise its returning false always
To anyone who come here,this is the best way I figured out
public static void main(String[] args) { File directory=new File(your directory location);//here /home/user/desktop/sound/ final String name=yourFileName; //here a; String[] myFiles = directory.list(new FilenameFilter() { public boolean accept(File directory, String fileName) { if(fileName.lastIndexOf(".")==-1) return false; if((fileName.substring(0, fileName.lastIndexOf("."))).equals(name)) return true; else return false; } }); if(myFiles.length()>0) System.Out.println("the file Exist"); }
Disadvantage:It will continue on searching even if the file is found which I never intended in my question.Any suggestion is welcome
-
agad almost 11 yearsBetter: java.io.File.list(FilenameFilter); if (listOfFiles.length > 0) {System.out.println("found");}
-
user207421 almost 11 yearsTry it why? How does this answer the question?
-
user2572367 almost 11 years@ridoy i dont know how it works in java but asterisk would return any name and any extension that can be found in a directory
-
user2511713 almost 11 years"a" is actually the file name here.the folder contain many files(around 1000).will it be wise to use this method?
-
user207421 almost 11 yearsNot with java.io.File it doesn't. Obviously you haven't tried it. -1
-
user2511713 almost 11 years@EJP:It does.I do want to return true if /home/user/desktop/sound/a.* is available where * represents any type.
-
user2511713 almost 11 years@agad:FilenameFilter is "/home/user/desktop/sound/a" here?
-
user207421 almost 11 years@user2511713 Make up your mind. Either it doesn't work or it answers the question. Not both at the same time.
-
Ruchira Gayan Ranaweera almost 11 years@user2511713 You can do it as this way
-
ridoy almost 11 years@bowmore, i changed the code and it works perfectly now,so can you re-consider your downvote?
-
ridoy almost 11 years@user2511713, inform me if this is what you want.
-
agad almost 11 yearsI would slightly modify the
accept
method to improve the performance:public boolean accept(final File dir, final String name) { if (name.charAt(0) != 'a') { return false; if (name.endsWith(".jpg")||name.endsWith(".txt")||name.endsWith(".mp3")||name.endsWith(".mp4")) { return true; } return false;}
-
user2511713 almost 11 yearsYour code will now work for .jpg,.mp3,.mp4,.txt .I want it to work with any file extension no matter what.have a look at my answer
-
ridoy almost 11 yearsBut you not mentioned that earlier in your question,u mentioned only 3 formats there.So make sure about what you want before asking a question and clearly mention that.