【问题标题】:Reading and checking values from an array从数组中读取和检查值
【发布时间】:2015-01-11 12:46:18
【问题描述】:

我想读取一个目录中的所有文件名,到目前为止,除了检查特定文件外,该目录有效。 它是用于检查“已创建”、“已删除”和“已编辑”实体文件的小型统计程序。

我想搜索实体文件的名称 (例如,如果实体“posting”存在,“created”或“edited”的值将加一,但 如果目录中没有具有此名称的实体,则“已删除”值将加一)。

我的代码:

package Statistik;

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

/**
 *
 * @author KyoAkashi
 */
public class Statistik {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        File folder = new File("C:\\Users\\Administrator\\Desktop\\Namens Test");
        File[] FileNames = folder.listFiles();

        for (int i = 0; i < FileNames.length; i++) {
            if (FileNames[i].isFile()) {
                System.out.println("File " + FileNames[i].getName());
            } else if (FileNames[i].isDirectory()) {
                System.out.println("Directory " + FileNames[i].getName());
            }
        }
        if(Arrays.asList(FileNames).contains("File 001.txt")){
            System.out.println("it exists");
        }
        else
            System.out.println("it doesn't exist");
    }

}

编辑: 来自 jon skeet requestet:

  • 我在上面扩展了我的问题
  • 我想要的输出是:此目录中的文件“它存在”
  • 我也尝试过创建一个新文件,但没有按上述方式工作
  • 没有错误消息,只是结果不是应该的

【问题讨论】:

  • “它不会工作”永远是不够的信息。准确告诉我们您所看到的、您期望看到的以及您为调查而执行的诊断。
  • 但是你应该注意List&lt;File&gt;永远不会包含String...
  • @JonSkeet 我已经更新了我的问题,希望现在更清楚

标签: java arrays file directory


【解决方案1】:

Arrays.asList(FileNames) 返回 ListFile 对象,因此您不能指望在其中找到 Strings。 这就是为什么Arrays.asList(FileNames).contains("File 001.txt") 总是返回false。

您必须创建一个实际文件名列表才能使.contains("File 001.txt") 工作。

您可以使用 Java 8 Streams 以简洁的方式做到这一点:

Stream.of(FileNames).map(File::getName).anyMatch(s->s.contains("File 001.txt""))

【讨论】:

    【解决方案2】:

    您正在将 File 对象与无效的 String 进行比较,因为 Arrays.asList(FileNames) 将返回您的 File 对象列表。可能您想要的是遍历数组并对文件名执行等于:

    boolean doesFileExists = false;
    for (File file : FileNames) {
        if (file.getName().equals("File 001.txt")) {
            System.out.println("it exists");
            doesFileExists = true;
            break;
        }
    }
    if (!doesFileExists) {
        System.out.println("it doesn't exist");
    }
    

    【讨论】:

    • 谢谢你,但它仍然说没有同名的文件,但我 100% 确定它是!
    • 这将为不是 OP 正在寻找的 每个 文件打印出“它不存在”。它应该打印一次“它存在”,但它仍然非常具有误导性。
    【解决方案3】:

    你可以用这个:

        File folder = new File("C:/Users/Administrator/Desktop/Namens Test");
        File[] FileNames = folder.listFiles();
        for (int i = 0; i < FileNames.length; i++) {
            if (FileNames[i].isFile()) {
                System.out.println("File " + FileNames[i].getName());
            } else if (FileNames[i].isDirectory()) {
                System.out.println("Directory " + FileNames[i].getName());
            }
        }
        File file = new File(folder.getPath() + "/File 001.txt");
        if (file.exists()) {
            System.out.println("it exists");
        } else {
            System.out.println("it doesn't exist");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2013-09-16
      • 2018-02-19
      • 1970-01-01
      相关资源
      最近更新 更多