源文件如下package com.io;
import java.io.*;
public class CountBytes {
public static void main(String[] args) throws IOException{

InputStream in;
if(args.length==0)
in=System.in;
else
in=new FileInputStream(args[0]);
int total=0;
while(in.read()!=-1)
total++;
System.out.println(total+"bytes");

}
}
很简单的文件,但是就是没有输出结果,也没有任何的错误提示!初步怀疑是被阻塞了,但是不知道在哪里?

解决方案 »

  1.   

    你的main方法声明抛出异常了,所以就没办法看到异常信息
    你把main方法的throws IOException去掉
    在程序里try,catch捕获,然后打印异常信息,看看是怎么回事
    一定是出现异常了。
      

  2.   

    因为你每次输入,读到的都部能是-1,哪怕你什么都输入直接输入回车,是因为你回车的时候有\n\r这个字符的~他们读取的分别上一相对应的ascII码,13和10,所以不能是-1了!
      

  3.   

    这样改下:
    import java.io.*;public class CountBytes {
    public static void main(String[] args) throws IOException {
    System.out.println("Please input :");
    InputStream in;
    if (args.length == 0)
    in = System.in;
    else
    in = new FileInputStream(args[0]);
    int total = 0;
    while (in.read() != -1){

    System.out.println(total + "bytes");
    total++;
    } }
    }
      

  4.   

    感谢你们的回答,但是好像没有正确的解答:
    一楼的,main方法也可以加上throws语句,只是这里发生阻塞,就算是main方法的throws IOException去掉
    在程序里try,catch捕获也是没有结果的!因为问题不在异常!2楼的:读到的完全有可能是-1,因为没有指定文件名的情况下,System.in文件的字节是318 bytes的啊!-1是到达流的末尾的返回值啊!
    怎么回事啊?
      

  5.   

    你如果是在命令行arg[0]输入的是文件夹绝对路径的话(D:/test.txt),就没有问题能够正常输出.
    如果是system.in的话,不知道你是想文件的内容呢,还是读你输入的内容呢,如果是计算输入内容的字节数就需要一个输入流用来读取输入内容!
      

  6.   

    但是你的意思很含糊:
    结果只是输出
    Please input :
    还是没有下文……………………(你们分够高的,但是………………唉!)有点失望!!
      

  7.   

    6楼:如果是就读取System.in文件呢?你会怎样修改呢?这里我是想读文件,写方面还是交给Outputstream 的write()
      

  8.   


    从你的代码看,InputStream in = System.in;这个是从控制台读取输入用的,也就是键盘输入。
    如2楼所说,没有得到-1的情况。所以一直处于堵塞状态。
    在命令行输入文件路径时,因为运行的是 InputStream in = new FileInputStream(filename);
    所以in.read()在文件最后会读到-1。