0
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]);
                }
            }
        }
    }

コメントを確認してください。ファイルがディレクトリにある場合でも、ファイルが見つからないという例外を与えるファイルを反復処理します (2 回目の反復で)。理由を教えてください。ありがとう

私の他の機能。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();
    }
}
4

2 に答える 2

1

これには次の 2 つの点で問題があると思われます。

String currentFile = child.getName();
String[] fileOutput = currentFile.split(".");
processFile(currentFile,fileOutput[0]);
  • getName()ファイル名の最後の部分、つまりディレクトリ内の名前のみを返します。processFileそのため、パーツがディレクトリ パーツを元に戻さない限り、現在の作業ディレクトリ内のファイルを処理するように要求しています。
  • split正規表現を取ります。.正規表現として提供することで、すべての文字で分割しています。currentFile.split("\\.")実際にドットで分割されるものを実際に望んでいると強く思います。

あなたは何をしているのかを示していませんがprocessFile、少なくともそのうちの1つが根本的な原因であり、おそらく両方であると思われます.

一歩下がって、ここでも診断結果を確認する価値があります。に渡されたものを見ると、何がprocessFile問題なのかを理解できるはずです。つまり、ファイル システムの問題ではなく、 への引数の計算方法に問題があるということですprocessFile。このようなエラーを診断できることは、ソフトウェア開発の非常に重要な部分です。

于 2013-04-08T06:00:01.533 に答える
0

あなたのコードは私にとってはうまくいきます。発生している可能性のあるエラーは、存在しないfileNameからファイルオブジェクトを作成しているprocessFile関数にあります。次に、FileNotFoundException をスローしている可能性のあるファイルの内容を読み込もうとしている可能性があります。processFile 関数をコメントするだけで、コードが機能します。

于 2013-04-08T06:00:21.473 に答える