这是我的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
答案 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();
}