#java #filefilter
#java #filefilter
Вопрос:
Как создать фильтр для файлов .txt?
Я написал что-то вроде этого, но в нем есть ошибка:
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();
}
Ответ №1:
Попробуйте что-то вроде этого…
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");
}
});
Комментарии:
1. возврат в строку! fileName.endWith(«.txt»); я получаю сообщение об ошибке endWith — не удается найти символ
2. хорошо, теперь ошибок нет, но когда я запускаю приложение, я могу выбирать все типы файлов, а не только txt : (есть идеи?
3. Проблема в том, что! символ в
return !fileName.endsWith(".txt");
. Удалите ! и вы будете принимать только текстовые файлы.4. я сделал это, и когда я запускаю приложение и щелкаю мой menuitem, он показывает JFileChooser, но я могу выбрать все типы файлов, о которых идет речь, я редактирую свой код 🙂
Ответ №2:
Здесь вы найдете несколько рабочих примеров. Это также хороший пример FileFilter, используемого в 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) amp;amp; (path.charAt(path.length()
- extension.length() - 1)) == '.')) {
return true;
}
}
}
return false;
}
Или более простым в использовании является FilenameFilter, который имеет метод accept с именем файла в качестве аргумента, поэтому вам не нужно получать его вручную.
Ответ №3:
Из JDK8 на словах это так просто, как
final String extension = ".java";
final File currentDir = new File(YOUR_DIRECTORY_PATH);
File[] files = currentDir.listFiles((File pathname) -> pathname.getName().endsWith(extension));
Ответ №4:
Начиная с Java7, вы можете просто использовать FileNameExtensionFilter(String description, String... extensions)
Простой аналог JFileChooser для примера был бы:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt"));
Я знаю, что на вопрос был дан ответ давно, но на самом деле это самое простое решение.
Ответ №5:
Вот небольшой служебный класс, который я создал:
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"));
Ответ №6:
Еще один простой пример:
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() amp;amp; 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
...
Ответ №7:
Здесь вы ошибаетесь:
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);
Ответ №8:
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) { }
Комментарии:
1. Какое значение ваш ответ добавляет к вопросу 5-летней давности? В чем разница между вашим ответом и другими ответами?
Ответ №9:
… Как насчет использования FileFilters от Apache из: org.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]);
}
Ответ №10:
FileFilter filtro=новое расширение filefilefilter(«Excel», «.csv»);
Комментарии:
1. Пожалуйста, объясните, как этот фрагмент кода отвечает на вопрос.
2. Объясните подробнее, пожалуйста