I've got some files in the relative directory (directory the app is running in) starting with '@' and I need to open all of them in java.开发者_如何转开发 Show me a way to accomplish it. If it helps, I'm working on netbeans.They're basically .ser files. So I have to fetch the objects in them
File dir = new File(".");
if(!dir.isDirectory()) throw new IllegalStateException("wtf mate?");
for(File file : dir.listFiles()) {
if(file.getName().startsWith("@"))
process(file);
}
After revisiting this, it turns out there's something else you can do. Notice the file filter I used.
import java.io.File;
class Test {
public static void main(String[] args) {
File dir = new File(".");
if(!dir.isDirectory()) throw new IllegalStateException("wtf mate?");
for(File file : dir.listFiles(new RegexFileFilter("@*\\.ser"))) {
process(file);
}
}
public static void process(File f) {
System.out.println(f.getAbsolutePath());
}
}
Here's the RegexFileFilter I used
public class RegexFileFilter implements java.io.FileFilter {
final java.util.regex.Pattern pattern;
public RegexFileFilter(String regex) {
pattern = java.util.regex.Pattern.compile(regex);
}
public boolean accept(java.io.File f) {
return pattern.matcher(f.getName()).find();
}
}
And here's the result. Note the three good files and the three bad files. If you had to do this on a more regular basis, I'd recommend using this, especially if you need to do it based on other attributes of the file other than file name, like length, modify date, etc.
C:\junk\j>dir
Volume in drive C has no label.
Volume Serial Number is 48FA-B715
Directory of C:\junk\j
02/14/2012 06:16 PM <DIR> .
02/14/2012 06:16 PM <DIR> ..
02/14/2012 06:15 PM 0 @bad.serr
02/14/2012 06:15 PM 0 @badser
02/14/2012 06:15 PM 0 @first.ser
02/14/2012 06:15 PM 0 @second.ser
02/14/2012 06:15 PM 0 @third.ser
02/14/2012 06:15 PM 0 bad@file.ser
02/14/2012 06:24 PM 692 RegexFileFilter.class
02/14/2012 06:24 PM 338 RegexFileFilter.java
02/14/2012 06:24 PM 901 Test.class
02/14/2012 06:24 PM 421 Test.java
10 File(s) 2,352 bytes
2 Dir(s) 10,895,474,688 bytes free
C:\junk\j>java Test
@first.ser
@second.ser
@third.ser
If it helps check java.io.FileFilter
.
You could use java.nio.file.DirectoryStream;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
//Java version 7
class A {
public static void main(String[] args) throws Exception
{
// Example directory on dos system
Path dir = Paths.get("c:\\a\\b\\");
/**
*
* Create a new DirectoryStream for the above path.
*
* List all files within this directory that begin
* with the letters A or B i.e "[AB)]*"
*
*/
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "[AB]*"))
{
// Print all the files to output stream
for(Path p: stream)
{
System.out.println(p.getFileName());
}
}
catch(Exception e)
{
System.out.println("problems locating directory");
}
}
}
Yes, open a directory File, get its List of child Files using a FileFilter that only allows through those file names that you want.
please see here, I think that is what you need. See the post referring to FileFilter
One-liner returning the list of File
objects:
myDir.listFiles((FilenameFilter)((d, n) -> n.startsWith('myPrefix')))
精彩评论