我想从数组中找到一个值

时间:2013-10-30 18:11:34

标签: java arrays

这是我的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) {
    }

}

我想要上面的代码来检查%appdata%中是否存在.minecraft文件夹。我总是N00B到Java。我曾经使用PHP,但似乎没有帮助我:)请帮忙,这让我很烦。

-Simon

4 个答案:

答案 0 :(得分: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?

答案 1 :(得分: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());
}

答案 2 :(得分:0)

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

那就是说,你的代码没有进行适当的检查。您正在创建一个File个对象数组,将数组转换为List,然后在列表中检查String值。 String值永远不会与File对象匹配。

如果要查找单个文件,请使用rolfl的答案。如果您想专门修改代码,可以使用以下内容:

  • 您需要遍历文件列表。转换为List
  • 可以获得什么?
  • 您需要找到一种方法来匹配File's名称和String名称。您可以在File对象上调用哪种方法来获取其名称?
  • 您需要在String名称和File's之间进行".minecraft"比较。这种比较可能是什么样的?

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

答案 3 :(得分: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();
}