我已经学习了大约一个月的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字符是什么?感谢
答案 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
循环体周围放置括号。我更喜欢在一行上有循环,或者更好的是,在主体周围放置大括号以使循环的范围更清晰(并且可能避免错误)。