0

私が述べた正確なディレクトリにファイルがあるのに、FileNotFound例外が私のコードに対してスローされています。私も試し...new File("euler8.txt");...ましたが成功しませんでした。私のコードは次のとおりです。

        private static void euler8() throws IOException
{   
    int current;
    int largest=0;
    int c =0;
    ArrayList<Integer> bar = new ArrayList<Integer>(0);
    File infile = new File("C:/Users/xxxxxxxx/workspace/Euler1/euler8.txt");
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(
            new FileInputStream(infile),
            Charset.forName("UTF-8")));
    try
    {
        while((c = reader.read()) != -1) 
        {
            bar.add(c);
        }
    }
    finally{reader.close();}
    for(int i=0; i<bar.size(); i++)
    {
        current = bar.get(i) * bar.get(i+1) * bar.get(i+2) * bar.get(i+3) * bar.get(i+4);
        if(largest<current)
            largest = current;
    }
}

それがしていることのイメージ:

http://img163.imageshack.us/img163/7017/halpbk.png

4

4 に答える 4

4

提案されている他のすべてを除いて、この問題が発生しているかどうかを確認できます(ラボで確認しています):拡張子が2倍のファイル。言い換えれば、あなたeuler8.txtが本当にそれと呼ばれていることを確認してください。euler8.txt.txtたとえば、拡張機能が非表示になっていると、ファイルエクスプローラーが最初に表示されますが、最初は奇妙に思われないかもしれません。拡張機能を非表示にします。

于 2012-12-19T23:15:24.393 に答える
2

スラッシュは正常に機能し、どのプラットフォームでも機能するため、推奨されます(相対パスは絶対パスよりも優れています)。パスが指定どおりに存在することを確認し、ファイルにつながるディレクトリへの読み取りアクセス権があることを確認してください。たとえば、Javaプログラムを別のユーザーとして実行している場合、「myuser」フォルダーへの読み取りアクセス権がない可能性があります。

于 2012-12-19T22:44:24.313 に答える
1

すべてのディレクトリがまだ存在しない場合、このコードは機能しません。そのため、タイプミスがあるか、フォルダがないことを前提としています(うまくいけば私は正しいと思います)。

私は通常java.io.File、親ディレクトリへの参照を持ち、それを後続のファイル参照で親として使用することを好みます。

File dir = new File("parentDir");
File inFile = new File(dir, "fileName");

また、 trueまたはfalseを返すメソッドがjava.io.Fileありexists()、後続の、、およびmkdir()mkdirs()createNewFile()要求されたファイルを実際に作成した場合にtrueまたはfalseを返します。

そうは言っても、私はあなたのコードを次のように変更しました、そしてそれは私のマシン上で実行されます。しかし、私はあなたがこれを通してどのデータを実行しようとしているのかわかりません。

    int current;
    int largest = 0;
    int c = 0;
    ArrayList<Integer> bar = new ArrayList<Integer>(0);
    File dir = new File("C:/Users/myuser/workspace/Euler1");
    if(!dir.exists()){
        dir.mkdirs();
    }
    File infile = new File(dir, "euler8.txt");
    if(!infile.exists()){
        infile.createNewFile();
    }
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(
            new FileInputStream(infile),
            Charset.forName("UTF-8")));
    try {
        while ((c = reader.read()) != -1) {
            bar.add(c);
        }
    } finally {
        reader.close();
    }
    for (int i = 0; i < bar.size(); i++) {
        current = bar.get(i) * bar.get(i + 1) * bar.get(i + 2) * bar.get(i + 3) * bar.get(i + 4);
        if (largest < current) {
            largest = current;
        }
    }
于 2012-12-19T22:46:17.317 に答える
0

バックスラッシュはまったく不要です。私はこのプログラムを実行しました:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test {
  public static void main(String[] args) throws IOException {
    File infile = new File("C:/Users/pats/workspace/test/euler8.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(
        new FileInputStream(infile), Charset.forName("UTF-8")));
    try {
      String s;
      while ((s = reader.readLine()) != null) {
        System.out.println(s);
      }
    } finally {
      reader.close();
    }
  }
}

これは非常によく似ており、ファイルの内容を印刷しました。

ファイルが存在することと、ファイルにアクセスできることの両方を確認する必要があると思います。

于 2012-12-19T22:52:37.673 に答える