Искам да избирам само .csv файлове с FileChooser, но когато се отваря, виждам всички разширения. Трябва ли да определям нещо повече от това?
btnFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("Choose Value File");
chooser.addChoosableFileFilter(new CSVFilter());
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
System.out.println("getCurrentDirectory(): "
+ chooser.getCurrentDirectory());
System.out.println("getSelectedFile() : "
+ chooser.getSelectedFile());
}
else {
System.out.println("No Selection ");
}
}
});
и Филтърът е вложен клас
class CSVFilter extends javax.swing.filechooser.FileFilter {
public boolean accept(File f) {
return f.isFile() || f.getName().toLowerCase().endsWith(".csv");
}
public String getDescription() {
return "*.csv";
}
}
Отговори:
6 за отговор № 1Може би трябва да бъде:
return f.isFile() && f.getName().toLowerCase().endsWith(".csv");
не:
return f.isFile() || f.getName().toLowerCase().endsWith(".csv");
2 за отговор № 2
Логиката е грешна. Трябва да бъде
return f.isFile() && f.getName().toLowerCase().endsWith(".csv");
В момента приемате всеки файл.
2 за отговор № 3
Трябва ти FileFilter
за филтриране на файлове от изгледа. ChoosableFileFilter
не скривайте файловете от изгледа, просто избягвайте да ги избирате. Погледни JFileChooser # setFileFilter (javax.swing.filechooser.FileFilter)
2 за отговор № 4
Трябва да бъде:
@Override
public boolean accept(File f) {
return (f.isFile() && f.getName().toLowerCase().endsWith(".csv")) || f.isDirectory();
}
Той също уважава директории.
1 за отговор № 5
Проблемът вероятно ще бъде с този ред:
return f.isFile() || f.getName().toLowerCase().endsWith(".csv");
Това ще върне true, ако файлът f
е файл, независимо дали е .csv файл или не.
Вероятно искате условие AND (&&), а не условие OR (||). Искате да приемете всеки Файл, където е файл И разширяването е .csv.
1 за отговор № 6
опитайте се да направите следното:
public boolean accept(File file) {
return file.isDirectory() || file.getAbsolutePath().endsWith(".csv");
}
0 за отговор № 7
Във вас CSVFilter имате метод наречен accept, който се връща TRUE
ако входният параметър е file OR csv file
.
Тя винаги ще се върне TRUE
с валиден параметър на файла.
Условието трябва да бъде
...
if (f.isFile() && f.isCSVFile())
...
0 за отговор № 8
Трябва действително да настроите filefilter не само да го добавите като допълнителен филтър
chooser.setFileFilter(new CSVFilter());