java - 即使文件位于目录中,迭代文件也会给出文件未找到异常。你能告诉我为什么吗?谢谢

标签 java file-io iteration

public static void main(String[] args) 
{
    try
    {
        File dir = new File("D:\\WayneProject\\Logs");

        if(dir.isDirectory())
        {   
            for(File child: dir.listFiles()) //NOT WORKING AFTER 1 ITERATION
            {
                if(child.isFile())
                {
                    String currentFile = child.getName();
                    String[] fileOutput = currentFile.split("\\.");
                    processFile(currentFile,fileOutput[0]);
                }
            }
        }
    }

请查看评论。即使文件位于目录中,迭代文件也会给出“找不到文件”异常(第二次迭代)。你能告诉我为什么吗?谢谢

我的其他功能。 fileOutput 用于设置目标文件的名称:

public static void processFile(String fileName, String fileOutput)
{
    try 
    {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String str = null;

        File fileDest1 = new File("D:\\" + fileOutput + "1.csv");
        BufferedWriter wr1 = new BufferedWriter(new FileWriter(fileDest1));

        File fileDest2 = new File("D:\\" + fileOutput + "2.csv");
        BufferedWriter wr2 = new BufferedWriter(new FileWriter(fileDest2));

        wr1.write("Date, Memory Free\n");
        wr2.write("Date, %Idle\n");

        while((str=br.readLine()) != null)
        {
            String[] st = str.split("\\s+");  

        if (st[0].equals("MemFree:"))
        {
            wr1.write(st[1] + ",\n");
        }

        if(isDouble(st))
        {
            wr2.write(st[6] + "," + "\n");
        }

        if(isDate(st[0]))
        {
            String subStr = str.substring(0, 20);
            wr1.write(subStr + ",");
            wr2.write(subStr + ",");
        }

    }

        br.close();
        wr1.close();
        wr2.close();
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}

最佳答案

我怀疑这是两个方面的问题:

String currentFile = child.getName();
String[] fileOutput = currentFile.split(".");
processFile(currentFile,fileOutput[0]);
  • getName() 仅返回文件名的最后部分 - 目录中的名称。因此,除非您的 processFile 部分将目录部分放回,否则您将要求它处理当前工作目录中的文件。
  • split 采用正则表达式。通过提供 . 作为正则表达式,您可以分割每个字符。我强烈怀疑你实际上想要 currentFile.split("\\.") 它实际上会在一个点上分割。

您没有给出任何关于 processFile 正在做什么的指示,但我怀疑至少其中之一是根本原因,并且可能两者都是。

这里也值得退一步看看你的诊断。如果您查看传递给 processFile 的内容,您应该能够理解出了什么问题 - 这不是文件系统的问题,而是您如何计算 参数的问题处理文件。能够诊断这样的错误是软件开发中非常的重要组成部分。

关于java - 即使文件位于目录中,迭代文件也会给出文件未找到异常。你能告诉我为什么吗?谢谢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872093/

相关文章:

c - 文件输出有两个换行符而不是一个

javascript - 循环访问对象时访问属性名称

oracle - 没有映射的Doctrine 2.0 native 查询

java - SimpleDateFormat,需要文本月份

file-io - EMACS Lisp程序员如何读取文本文件用于非编辑目的?

java - Apache HttpClient、User-Agent 和企业代理

php - PHP 在文件处理程序被垃圾收集后是否关闭文件?

c++ - 在迭代时修改数据结构

java - 不抛出测试异常

java - ViewPager 中 Fragment 内的 TextView 在方向更改时为空