1

这是我的java代码:

import java.io.File;
import java.util.Arrays;



public class mainClass {

    public static void main(String... args) {
        File[] files = new File("%appdata%").listFiles();
        showFiles(files);
        System.out.println( Arrays.toString( files ) );
        if (Arrays.asList(files).contains(".minecraft")) {
            System.out.println("Success!");
        }
    }

    public static void showFiles(File[] files) {
    }

}

我希望上面的代码检查 .minecraft 文件夹是否存在于 %appdata% 中。我对 Java 完全是 N00B。我使用过 PHP,但似乎对我没有帮助 :) 请帮忙,这让我很恼火。

-西蒙

4

4 回答 4

2

如果您对仅查找“.minecraft”文件感兴趣,那么执行以下操作会容易得多:

File appdata = new File("%appdata%");
File minecraft = new File(appdata, ".minecraft");
if (minecraft.exists()) {
    System.out.println("Success");
}

编辑:根据评论,(我主要是一个 linux 人),你需要使用正确的%APPDATA%位置:How do I get the value of Windows' %APPDATA% location variable in Java?

于 2013-10-30T18:14:54.750 回答
1

问题是这.minecraft是一个隐藏文件夹。您需要像这样访问文件夹:

File directory = new File("%appdata%");    
File[] hiddenFiles = directory.listFiles((FileFilter) HiddenFileFilter.HIDDEN);
for (File hiddenFile: hiddenFiles) {
    System.out.println("hidden file: " + hiddenFile.getCanonicalPath());
}
于 2013-10-30T18:15:00.810 回答
0

正如 rolfl 所提到的,有一种更好的方法来查找单个文件。

也就是说,您的代码没有执行正确的检查。您正在创建一个File对象数组,将数组转换为 a List,然后检查列表中的String值。该String值永远不会匹配File对象。

如果要查找单个文件,请使用 rolfl 的答案。如果你想专门修复你的代码,这里有一些东西可以帮助你开始:

  • 您需要遍历文件列表。转换为 a 有什么好处List
  • 您需要找到一种将File's名称与String名称匹配的方法。你可以在对象上调用什么方法File来获得它的名字?
  • 您需要StringFile's名称和".minecraft". 这种比较可能是什么样的?

请注意:也参考 L.Butz 的答案;我还没有访问过 Java 中的隐藏文件,因此您可能需要额外的步骤才能访问它们。

于 2013-10-30T18:19:33.017 回答
0

%appdata%是一个环境变量,因此它不会被File自动解析。所以你需要在列出它之前解决它。这是使用System#getenv完成的

@Test
public void dirExistsInAppData() {
    Assert.assertTrue(dirExistsInAppData(".minecraft"));
}

private boolean dirExistsInAppData(final String dirname) {
    File dir = new File(System.getenv("APPDATA"), dirname);
    return dir.exists() && dir.isDirectory();
}
于 2013-10-30T18:47:26.347 回答