如何用Java制作FileFilter?
如何对.txt文件进行筛选 我写了这样的东西,但有一个错误:如何用Java制作FileFilter?,java,filefilter,Java,Filefilter,如何对.txt文件进行筛选 我写了这样的东西,但有一个错误: private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser chooser = new JFileChooser(); int retval = chooser.showOpenDialog(null);
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser chooser = new JFileChooser();
int retval = chooser.showOpenDialog(null);
String yourpath = "E:\\Programy Java\\Projekt_SR1\\src\\project_sr1";
File directory = new File(yourpath);
String[] myFiles;
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File directory, String fileName) {
return fileName.endsWith(".txt");
}
};
myFiles = directory.list(filter);
if(retval == JFileChooser.APPROVE_OPTION)
{
File myFile = chooser.getSelectedFile();
}
你会发现一些有用的例子。也是JFileChooser中使用的FileFilter的一个很好的示例
最基本的是,您需要重写类并在其accpet方法中编写自定义代码。上例中的accept方法根据文件类型进行过滤:
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
} else {
String path = file.getAbsolutePath().toLowerCase();
for (int i = 0, n = extensions.length; i < n; i++) {
String extension = extensions[i];
if ((path.endsWith(extension) && (path.charAt(path.length()
- extension.length() - 1)) == '.')) {
return true;
}
}
}
return false;
}
公共布尔接受(文件){
if(file.isDirectory()){
返回true;
}否则{
字符串路径=file.getAbsolutePath().toLowerCase();
for(int i=0,n=extensions.length;i
或者更简单的方法是使用带有文件名的accept方法作为参数,所以您不需要手动获取它。试试这样的方法
String yourPath = "insert here your path..";
File directory = new File(yourPath);
String[] myFiles = directory.list(new FilenameFilter() {
public boolean accept(File directory, String fileName) {
return fileName.endsWith(".txt");
}
});
你在这里出了问题:
int retval = chooser.showOpenDialog(null);
public boolean accept(File directory, String fileName) {`
return fileName.endsWith(".txt");`
}
首先显示“文件选择器”对话框,然后应用过滤器!这行不通。首先应用过滤器,然后显示对话框:
public boolean accept(File directory, String fileName) {
return fileName.endsWith(".txt");
}
int retval = chooser.showOpenDialog(null);
下面是我创建的一个小实用程序类:
import java.io.File;
import java.io.FilenameFilter;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* Convenience utility to create a FilenameFilter, based on a list of extensions
*/
public class FileExtensionFilter implements FilenameFilter {
private Set<String> exts = new HashSet<String>();
/**
* @param extensions
* a list of allowed extensions, without the dot, e.g.
* <code>"xml","html","rss"</code>
*/
public FileExtensionFilter(String... extensions) {
for (String ext : extensions) {
exts.add("." + ext.toLowerCase().trim());
}
}
public boolean accept(File dir, String name) {
final Iterator<String> extList = exts.iterator();
while (extList.hasNext()) {
if (name.toLowerCase().endsWith(extList.next())) {
return true;
}
}
return false;
}
}
用法:
String[] files = new File("myfile").list(new FileExtensionFilter("pdf", "zip"));
另一个简单的例子:
public static void listFilesInDirectory(String pathString) {
// A local class (a class defined inside a block, here a method).
class MyFilter implements FileFilter {
@Override
public boolean accept(File file) {
return !file.isHidden() && file.getName().endsWith(".txt");
}
}
File directory = new File(pathString);
File[] files = directory.listFiles(new MyFilter());
for (File fileLoop : files) {
System.out.println(fileLoop.getName());
}
}
// Call it
listFilesInDirectory("C:\\Users\\John\\Documents\\zTemp");
// Output
Cool.txt
RedditKinsey.txt
...
从JDK8的文字来看,它非常简单
final String extension = ".java";
final File currentDir = new File(YOUR_DIRECTORY_PATH);
File[] files = currentDir.listFiles((File pathname) -> pathname.getName().endsWith(extension));
由于Java7,您只需使用
FileNameExtensionFilter(字符串描述、字符串…扩展名)
与该示例类似的简单JFileChooser是:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt"));
我知道这个问题很久以前就得到了回答,但这实际上是最简单的解决方案;
File f = null;
File[] paths;
try {
f = new File(dir);
// filefilter
FilenameFilter fileNameFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.lastIndexOf('.') > 0) {
int lastIndex = name.lastIndexOf('.');
String str = name.substring(lastIndex);
if (str.equals("." + selectlogtype)) {
return true;
}
}
return false;
}
};
paths = f.listFiles(fileNameFilter);
for (int i = 0; i < paths.length; i++) {
try {
FileWriter fileWriter = new FileWriter("C:/Users/maya02/workspace/ftp_log/filefilterlogtxt");
PrintWriter bWriter = new PrintWriter(fileWriter);
for (File writerpath1 : paths) {
bWriter.println(writerpath1);
}
bWriter.close();
}
catch (IOException e) { System.out.println("HATA!!"); }
}
System.out.println("path dosyaya aktarıldı!.");
}
catch (Exception e) { }
文件[]路径;
试一试{
f=新文件(目录);
//文件过滤器
FilenameFilter FilenameFilter=新FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
如果(name.lastIndexOf('.')>0){
int lastIndex=name.lastIndexOf('.');
String str=name.substring(lastIndex);
if(str.equals(“.”+selectlogtype)){
返回true;
}
}
返回false;
}
};
路径=f.listFiles(fileNameFilter);
for(int i=0;iorg.apache.commons.io
就像:
import org.apache.commons.io.filefilter.FileFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
...
File dir = new File(".");
String[] filters = { "*.txt"};
IOFileFilter wildCardFilter = new WildcardFileFilter(filters, IOCase.INSENSITIVE);
String[] files = dir.list( wildCardFilter );
for ( int i = 0; i < files.length; i++ ) {
System.out.println(files[i]);
}
import org.apache.commons.io.filefilter.filefilter;
导入org.apache.commons.io.filefilter.WildcardFileFilter;
...
文件目录=新文件(“.”);
字符串[]过滤器={“*.txt”};
IOFileFilter wildCardFilter=新的WildcardFileFilter(过滤器,IOCase.INSENSITIVE);
String[]files=dir.list(通配符过滤器);
对于(int i=0;i
FileFilter filter=新的扩展文件过滤器(“Excel”和“.csv”) 排队返回!fileName.endWith(“.txt”);我得到了错误endWith-找不到symbolok现在没有错误,但当我运行应用程序时,我可以选择所有类型的文件,不仅仅是txt:(一些想法?问题是return!fileName.endsWith(“.txt”)中的!字符;
。删除!您将只接受txt文件。我这样做了,当我运行应用程序并单击我的菜单项时,它会显示JFileChooser,但我可以选择有问题的所有类型的文件。我编辑我的代码:)您的答案对一个5年前的问题有什么价值?你的答案和其他答案有什么不同?请解释这段代码是如何回答这个问题的。请解释更多