java - 未使用目录中的文件填充的文件数组,无法弄清楚原因
问题描述
我希望在 JList 中显示从 JFileChooser 中选择的文件夹的内容。唯一的问题是,应该包含所选文件夹内的所有文件的 File[] 数组,由于某种原因,我无法弄清楚为什么......它没有被填充。我在网上某处读过 .listFiles(); 如果方法没有将目标路径识别为目录,则返回 null ......但我包括 jFileChooser.getSelectedFile().isDirectory(); 检查 if 语句。我不明白为什么会发生这种情况......
这是代码:
private void jBtnSelectModComActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSelectModComActionPerformed
// TODO add your handling code here:
try {
SIL modificaSIL = SILmag.getSilDupaNume(jFileChooserModCom.getSelectedFile().getName().toString());
if (jFileChooserModCom.getSelectedFile().getAbsolutePath().toString().startsWith(siluriNoi)
&& jFileChooserModCom.getSelectedFile().isDirectory()) {
try {
jTextFieldNumeModCom.setText(modificaSIL.getNume());
jTextFieldTipModCom.setText(modificaSIL.getTip());
jTextAreaDescModCom.setText(modificaSIL.getDescriere());
String locatie = siluriNoi + "\\" + modificaSIL.toString() + "\\";
File locatieMapa = new File(locatie);
File[] arrayFisiere = locatieMapa.listFiles();
System.out.println(arrayFisiere.toString()); //A check to see if the file array gets populated, but it returns null
for(File f : arrayFisiere){
listaFisiereModCom.add(f.getName());
}
arrayFisiereModCom = new String[listaFisiereModCom.size()];
for(int i = 0; i < listaFisiereModCom.size(); i++){
arrayFisiereModCom[i] = listaFisiereModCom.get(i);
}
Arrays.sort(arrayFisiereModCom);
jListModCom.setModel(new javax.swing.AbstractListModel<String>() {
String[] strings = arrayFisiereModCom;
public int getSize() { return strings.length; }
public String getElementAt(int i) { return strings[i]; }
});
dosarModCom.add(new File(jFileChooserModCom.getSelectedFile().getPath()));
jFileChooserModCom.rescanCurrentDirectory();
jFileChooserModCom.revalidate();
} catch(NullPointerException ex) {
jLabelAvertismenteModCom.setText("<html><center>Trebuie sa selectezi o comanda!</center></html>");
}
} else {
jLabelAvertismenteModCom.setText("<html><center>Comenzile set pot modifica doar<br> din locatia la care ai access!</center></html>");
}
} catch(NullPointerException ex) {
jLabelAvertismenteModCom.setText("<html><center>Trebuie sa selectezi o comanda!</center></html>");
} catch (SQLException ex) {
java.util.logging.Logger.getLogger(MeniuTaburi.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}//GEN-LAST:event_jBtnSelectModComActionPerformed
我在 JFileChooser 上实现了一些更改:
jFileChooserModCom.setCurrentDirectory(new File(siluriNoi)); //siluriNoi is a String path to a particular directory
jFileChooserModCom.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
jFileChooserModCom.setControlButtonsAreShown(false);
jFileChooserModCom.rescanCurrentDirectory();
jFileChooserModCom.revalidate();
解决方案
&& jFileChooserModCom.getSelectedFile().isDirectory()) {
try {
jTextFieldNumeModCom.setText(modificaSIL.getNume());
jTextFieldTipModCom.setText(modificaSIL.getTip());
jTextAreaDescModCom.setText(modificaSIL.getDescriere());
String locatie = siluriNoi + "\\" + modificaSIL.toString() + "\\";
File locatieMapa = new File(locatie);
File[] arrayFisiere = locatieMapa.listFiles();
我包括 jFileChooser.getSelectedFile().isDirectory(); 查看
是的,但您从未真正使用过 getSelectedFile()。
你用:
String locatie = siluriNoi + "\\" + modificaSIL.toString() + "\\";
File locatieMapa = new File(locatie);
File[] arrayFisiere = locatieMapa.listFiles();
你的代码应该是这样的:
File selectedDirectory = fileChooser.getSelectedFile();
System.out.println(selectedDirectory); // to verify the complete file path
File[] listOfFiles = selectedDirector.listFiles();