【问题标题】:I want to find a value from an array我想从数组中找到一个值
【发布时间】:2013-10-30 18:11:33
【问题描述】:

这是我的 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,但似乎对我没有帮助 :) 请帮忙,这让我很烦。

-西蒙

【问题讨论】:

  • Basic I/O 教程开始。
  • 请不要给已经展示了他到目前为止所做的事情的人投反对票。

标签: java arrays


【解决方案1】:

如果您有兴趣仅查找“.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?

【讨论】:

  • 这是我的新代码:public class mainClass { File appdata = new File(System.getenv("APPDATA")); File minecraft = new File(appdata, ".minecraft"); if (minecraft.exists()) { System.out.println("Success"); } } 但它给了我这个错误:**错误:在 mainClass 类中找不到主方法,请将主方法定义为:public static void main(String[ ] args) **
【解决方案2】:

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

File directory = new File("%appdata%");    
File[] hiddenFiles = directory.listFiles((FileFilter) HiddenFileFilter.HIDDEN);
for (File hiddenFile: hiddenFiles) {
    System.out.println("hidden file: " + hiddenFile.getCanonicalPath());
}

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

      【解决方案4】:

      %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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 2021-07-06
        相关资源
        最近更新 更多