首页 > 解决方案 > 未使用目录中的文件填充的文件数组,无法弄清楚原因

问题描述

我希望在 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();

标签: javaarraysswingfile

解决方案


        && 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();

推荐阅读