【问题标题】:Java - Windows 7 reading files and write them to a ListJava - Windows 7 读取文件并将它们写入列表
【发布时间】:2012-09-02 10:05:07
【问题描述】:

基本上,我想做的是从我的 Windows 机器的特定路径读取所有文件,例如“C:\”。将所有文件读取到文件数组后,我在 for 循环中检查文件是否为目录。我也在过滤掉隐藏文件。之后,我对 2 个数组列表中的每一个进行排序,如果当前目录不是根目录,则添加“../”并将所有内容写入最终数组列表。

但问题是 - 这个 java 程序向我显示的目录比我认为的要多。因为 "C:\> dir" 的 windows cmd shell 的输出与我的 java 程序的输出不同。

有什么办法解决这个问题吗?

“C:\> dir”的输出:

{ "PerfLogs", "Program Files", "Program Files(x86)", "Users", "Windows" }

这个java程序的输出:

{ "Documents and Settings", "Dokumente und Einstellungen", "PerfLogs", "Program Files(x86)", "Program Files", "Users", "Windows", "pagefile.sys" }

private void getFileBrowser(String dirPATH) {
    ITEM_TEMP = new ArrayList<String>();
    PATH_TEMP = new ArrayList<String>();
    ITEM_TEMP.clear();
    PATH_TEMP.clear();

    currentWorkingDirectory = dirPATH;

    File f = new File(dirPATH);
    File[] files = f.listFiles();

    for(int i=0; i < files.length; i++) {
        File file = files[i];

        if(file.isDirectory()) {
            if(!file.isHidden() & !file.getName().startsWith("$")) {
                PATH_TEMP.add(file.getPath());
                ITEM_TEMP.add(file.getName() + "/");
            }
        }
        else {
            if(!file.isHidden()) {
                PATH_TEMP.add(file.getPath());
                ITEM_TEMP.add(file.getName());
            }
        }
    }

    Collections.sort(ITEM_TEMP);
    Collections.sort(PATH_TEMP);

    ITEM.clear();
    PATH.clear();

    if(!dirPATH.equals(rootDirectory)) {
        ITEM.add("../");
        PATH.add(f.getParent());
    }

    for(int i=0; i < ITEM_TEMP.size(); i++) {
        ITEM.add(ITEM_TEMP.get(i));
    }
    for(int i=0; i < PATH_TEMP.size(); i++) {
        PATH.add(PATH_TEMP.get(i));
    }
}

【问题讨论】:

    标签: java windows file list


    【解决方案1】:

    看起来您的 Java 代码正在打印出每个文件(默认情况下 pagefile.sys 在您的系统上应该是隐藏的)。您说要过滤掉隐藏文件。

    问题大概出在这一行:

     if(!file.isHidden() & !file.getName().startsWith("$"))
    

    & 是位与运算符,你应该使用 && -逻辑与运算符。

    【讨论】:

    • 啊,好吧。是否有一种 JAVA 方式来仅获取 cmd“dir”命令显示的文件/目录?还是我应该使用运行时来挑选目录?
    • 有两种方法。通过使用exec 命令(参见此处java-samples.com/showtutorial.php?tutorialid=8)或...了解dir 显示的文件/目录类型并修复您的代码来直接使用dir 命令。当您使用&amp; 修复错误时,您可能会非常接近解决方案目录,默认情况下不会打印隐藏文件。我不确定startsWith("$") 的声明是否必要。您可能可以通过执行dir /? 来阅读目录帮助-也许它会进一步帮助您。
    • 看来我使用“&”还是“&&”都没关系——没有其他结果。也许我稍后会尝试运行时方式。 PS:需要"startsWith("$")"命令来过滤掉"Windows"目录下的一些文件夹。它们不会随着“isHidden()”而消失..
    猜你喜欢
    • 2015-06-26
    • 2021-01-11
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多