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

除了已建议的所有其他内容外,您可以检查您是否遇到此问题(我们在实验室中已经看到):文件扩展名为两倍。换句话说,确保你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");

此外,java.io.File有一个exists()返回 true 或 false 的方法,其后续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 回答