eclipse通过编译但是没有输出结果(I/O类)

athlonzeng 2008-05-24 10:03:52
源文件如下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");

}
}


很简单的文件,但是就是没有输出结果,也没有任何的错误提示!初步怀疑是被阻塞了,但是不知道在哪里?
...全文
233 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
athlonzeng 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 anqini 的回复:]
引用 10 楼 athlonzeng 的回复:
问题解决了!呵呵,看到结果了,虽然和之前的期望结果不同。谢谢四楼的朋友

没明白我意思...结帖就算了~!
[/Quote]
呵呵,那么你的意思具体点行吗?那么如果不能是-1的话,怎样才能达到目的呢?指教了。
anqini 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 athlonzeng 的回复:]
问题解决了!呵呵,看到结果了,虽然和之前的期望结果不同。谢谢四楼的朋友
[/Quote]
没明白我意思...结帖就算了~!
athlonzeng 2008-05-24
  • 打赏
  • 举报
回复
问题解决了!呵呵,看到结果了,虽然和之前的期望结果不同。谢谢四楼的朋友
willim0201 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 athlonzeng 的回复:]
感谢你们的回答,但是好像没有正确的解答:
一楼的,main方法也可以加上throws语句,只是这里发生阻塞,就算是main方法的throws IOException去掉
在程序里try,catch捕获也是没有结果的!因为问题不在异常!

2楼的:读到的完全有可能是-1,因为没有指定文件名的情况下,System.in文件的字节是318 bytes的啊!-1是到达流的末尾的返回值啊!


怎么回事啊?
[/Quote]

从你的代码看,InputStream in = System.in;这个是从控制台读取输入用的,也就是键盘输入。
如2楼所说,没有得到-1的情况。所以一直处于堵塞状态。
在命令行输入文件路径时,因为运行的是 InputStream in = new FileInputStream(filename);
所以in.read()在文件最后会读到-1。
athlonzeng 2008-05-24
  • 打赏
  • 举报
回复
6楼:如果是就读取System.in文件呢?你会怎样修改呢?这里我是想读文件,写方面还是交给Outputstream 的write()
athlonzeng 2008-05-24
  • 打赏
  • 举报
回复
但是你的意思很含糊:
结果只是输出
Please input :


还是没有下文……………………(你们分够高的,但是………………唉!)有点失望!!
code_JAVA 2008-05-24
  • 打赏
  • 举报
回复
你如果是在命令行arg[0]输入的是文件夹绝对路径的话(D:/test.txt),就没有问题能够正常输出.
如果是system.in的话,不知道你是想文件的内容呢,还是读你输入的内容呢,如果是计算输入内容的字节数就需要一个输入流用来读取输入内容!
athlonzeng 2008-05-24
  • 打赏
  • 举报
回复
感谢你们的回答,但是好像没有正确的解答:
一楼的,main方法也可以加上throws语句,只是这里发生阻塞,就算是main方法的throws IOException去掉
在程序里try,catch捕获也是没有结果的!因为问题不在异常!

2楼的:读到的完全有可能是-1,因为没有指定文件名的情况下,System.in文件的字节是318 bytes的啊!-1是到达流的末尾的返回值啊!


怎么回事啊?
fiore 2008-05-24
  • 打赏
  • 举报
回复
这样改下:
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++;
}

}
}
vincent343425185 2008-05-24
  • 打赏
  • 举报
回复
楼上的正解
anqini 2008-05-24
  • 打赏
  • 举报
回复
因为你每次输入,读到的都部能是-1,哪怕你什么都输入直接输入回车,是因为你回车的时候有\n\r这个字符的~他们读取的分别上一相对应的ascII码,13和10,所以不能是-1了!
loujianchengdd 2008-05-24
  • 打赏
  • 举报
回复
你的main方法声明抛出异常了,所以就没办法看到异常信息
你把main方法的throws IOException去掉
在程序里try,catch捕获,然后打印异常信息,看看是怎么回事
一定是出现异常了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧