抛出Java Filenotfound异常

时间:2012-12-19 22:30:40

标签: java io filenotfoundexception

我的代码正在抛出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 个答案:

答案 0 :(得分:4)

除了已建议的所有其他内容之外,您可以检查是否存在此问题(我们在实验室中已经看到过):扩展名为两倍的文件。换句话说,请确保您的euler8.txt真的被称为euler8.txt.txt,而不是{{1}},因为,使用隐藏的扩展名,文件资源管理器会显示第一个,但最初可能不会让您感到奇怪,如果你不记得它应该隐藏扩展名。

答案 1 :(得分:2)

正斜杠工作正常,因为它们适用于任何平台(相对路径优于绝对路径),因此是首选。确保您的路径按指定存在,并验证您对通向该文件的目录具有读访问权限。例如,如果您以不同的用户身份运行java程序,则可能没有“myuser”文件夹的读取权限。

答案 2 :(得分:1)

如果所有目录都不存在,此代码将无效,因此我假设(希望我是正确的)您有拼写错误或缺少文件夹。

我通常更喜欢对父目录进行java.io.File引用,然后在后续文件引用中将其用作父对象,即:

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

此外,java.io.Fileexists()方法返回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;
        }
    }

答案 3 :(得分: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();
    }
  }
}

非常相似,它打印了我文件的内容。

我认为你需要检查文件是否存在,以及你是否有权访问它。