【问题标题】:Filenames not being added to ArrayList from different class未从不同类添加到 ArrayList 的文件名
【发布时间】:2013-09-14 08:03:58
【问题描述】:

我在类 checksumFinder 中有一个方法 hexFinder。在 hexFinder 中,每个文件都被读取并命名为 good 文件或 bad 文件。然后将其放入两个 ArrayList 之一,listGoodFileslistBadfiles

这两个 ArrayList 都属于 multiFile 方法中的 checksumGUI 类。此方法为所选文件夹中的每个文件调用 hexFinder。它还会输出一条消息,显示文件夹中有多少 goodbad 文件。

当我将文件名添加到其中一个 ArrayList 时,没有添加任何内容。

这里有一些来自 checksumFinder 类的代码,它们可能会导致问题

class checksumFinder {

checksumGUI cg = new checksumGUI();

String hexFinder(File currentFile,...){

.... // determine file is good/bad 

if (l1 == l2) {
    cg.listGoodFiles.add(currentFile.getName());
    } else{
      cg.listBadFiles.add(currentFile.getName());
    }

这是 checksumGUI 类中的 multiFile 方法

public void multiFile(JFileChooser inFileName) throws FileNotFoundException, IOException {

    checksumFinder cf = new checksumFinder();
    ArrayList<String> listTypeErrFiles = new ArrayList<String>();
    File folderFile = inFileName.getSelectedFile();
    File[] listAllFiles = folderFile.listFiles();

    for (int i = 0; i < listAllFiles.length; i++) {
        File currentFile = listAllFiles[i];
        if (currentFile.isFile() && currentFile.getName().endsWith(".pcf")) {

            cf.hexFinder(currentFile, null, null, null);
        } else {
            listTypeErrFiles.add(currentFile.getName());
            System.out.println("-----------------------------");
            System.out.println("Incorrect filetype:\n" + currentFile.getName());
            System.out.println("-----------------------------\n");
        }
    }

    JTextArea ta = new JTextArea(25, 25);
    ta.setText("Folder contains " + listAllFiles.length + " files\n\n"+ "Folder has " + 
            listGoodFiles.size() + " good files;\n" + listGoodFiles + "\nFolder has " +
            listGoodFiles.size() + " bad files;\n" + listBadFiles +"\nFolder has " + 
            listTypeErrFiles.size() + " file of wrong type;\n" + listTypeErrFiles);

            ta.setWrapStyleWord(true);
            ta.setLineWrap(true);
            ta.setCaretPosition(0);
            ta.setEditable(false);

            JOptionPane.showMessageDialog(null,
            new JScrollPane(ta),"Folder Contents", JOptionPane.INFORMATION_MESSAGE);
}

从我制作这个程序的方式来看,两个班级之间有很多变动。 (我确信它可以做得更好,但这是我知道的唯一方法)

编辑:

我已经查看过类似的问题,例如 this,但我发现没有任何有用的问题

编辑:

checksumFinder 类的(最新)代码可以在 HERE 找到。

非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: java list class arraylist filenames


    【解决方案1】:

    您正在 checksumFinder 中创建一个新的 checksumGUI 实例,而不是访问现有实例:

    cg = new checksumGUI();
    

    您应该将现有实例作为构造函数的参数:

    class checksumFinder {
        private final checksumGUI cg;
    
        checksumFinder(checksumGUI cg) {
            this.cg = cg;
        }
    
        ...
    }
    

    而不是multiFile() 中的checksumFinder cf = new checksumFinder();,将当前实例传递给checksumFinder 构造函数:

    checksumFinder cf = new checksumFinder(this);
    

    (另外,使用 java 编码约定,例如大写的类名,将使代码更易于阅读)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2018-11-13
      • 1970-01-01
      • 2018-05-06
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多