意外的FileNotFoundException

时间:2014-01-27 20:39:23

标签: java eclipse filenotfoundexception

我已经学习了大约一个月的Java,目前正在学习Java的I / O,但我遇到了一些问题。以下是使用Inputstream练习的简单玩具代码。

import java.io.*;

public class IOTest{
   public static void main(String[] args) throws IOException{
   InputStream in;
   in = new FileInputStream(args[0]);
   int total = 0;
   while (in.read() != -1)
   total++;
   System.out.println(total + " bytes");
   }
}

上面的代码编译好了。此代码的目的是简单地计算参数中的字节数。但是,当我使用参数运行已编译的代码时,例如:

java IOTest firstTrial 

系统提供以下异常消息:

Exception in thread "main" java.io.FileNotFoundException: firstTrial <The system 
cannot find the file specified>
       at java.io.FileInputStream.open(Native Method)
       at java.io.FileInputStream.<init><Unknown Source>
       at java.io.FileInputStream.<init><Unknown Source>
       at IOTest.main<IOTest.java:8>

请指出抛出的异常是怎么回事?

另外一个问题是我正在使用Eclipse进行java编程。 Eclipse for Java中的End-of-Input字符是什么?感谢

2 个答案:

答案 0 :(得分:0)

您没有阅读文件:

java.io.FileNotFoundException: firstTrial <The system 
cannot find the file specified>

将一些完整的文件路径作为参数,程序将使用字节。

答案 1 :(得分:0)

好像你想把参数字符串本身作为InputStream,阅读,但FileInputStream的工作方式是你传递的String是不是要读取的数据,而是要打开和读取的文件名

但是,您可以将字符串本身作为数据读取。如果要在Java中使用StringReader, API,或者如果要将原始字节作为Reader读取,也可以使用InputStream执行此操作。 (但是你需要指定字符编码。在这种情况下,我将其指定为“UTF-8”。)

import java.io.*;

public class IOTest {
    public static void main(String[] args) throws IOException {
        byte[] bytes = args[0].getBytes("UTF-8");
        InputStream in = new ByteArrayInputStream(bytes);
        int total = 0;
        while (in.read() != -1) {
            total++;
        }
        System.out.println(total + " bytes");
    }
}

请注意,我从字符串中获取字节,然后使用ByteArrayInputStream而不是FileInputStream来读取它们。我做了另一个改变,就是在while循环体周围放置括号。我更喜欢在一行上有循环,或者更好的是,在主体周围放置大括号以使循环的范围更清晰(并且可能避免错误)。