import java.io.*;
public class TestIO {
public TestIO() {
}
public static void main(String[] args) {
TestIO testio = new TestIO();
String FileName="d:\\javawork";
File myFile=new File(FileName);
if(!myFile.exists()){
System.err.println("Can't Find "+FileName);
return;
}
System.out.println("File "+FileName+ " is "+myFile.length()+" bytes Long !");
if(myFile.isDirectory()){
System.err.println("File "+FileName+" is a Directort !");
return;
}
}
}
运行的结果为 :
D:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "D:\javawork\testFile\classes;D:\Borland\JBuilder2006\jdk1.5\lib\dt.jar;D:\Borland\JBuilder2006\jdk1.5\lib\tools.jar;D:\Borland\JBuilder2006\jdk1.5\lib\htmlconverter.jar;D:\Borland\JBuilder2006\jdk1.5\lib\jconsole.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\javaws.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunjce_provider.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\localedata.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunpkcs11.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\dnsns.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\plugin.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\deploy.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\im\thaiim.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\im\indicim.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\charsets.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\jsse.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\rt.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\jce.jar" testfile.TestIO
File d:\javawork is a Directort !
File d:\javawork is 0 bytes Long !
Debug的结果为:
D:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "D:\javawork\testFile\classes;D:\Borland\JBuilder2006\jdk1.5\lib\dt.jar;D:\Borland\JBuilder2006\jdk1.5\lib\tools.jar;D:\Borland\JBuilder2006\jdk1.5\lib\htmlconverter.jar;D:\Borland\JBuilder2006\jdk1.5\lib\jconsole.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\javaws.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunjce_provider.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\localedata.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunpkcs11.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\dnsns.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\plugin.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\deploy.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\im\thaiim.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\im\indicim.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\charsets.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\jsse.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\rt.jar;D:\Borland\JBuilder2006\jdk1.5\jre\lib\jce.jar" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=TEST_Z:4936,suspend=y testfile.TestIO
File d:\javawork is 0 bytes Long !
File d:\javawork is a Directort !
9 个解决方案
#1
为什么没有人回答我的帖子啊,这问题比较,有供大家一起学习价值.
#2
原因在于使用System.out的时候,打印数据的线程和运行我们的程序的线程实际上不是同一个。到底谁先执行不是我们的程序可以控制的。
所以,如果两个打印的语句执行的debug的时候,时间间隔很短,就有可能顺序颠倒。而在debug的时候,由于每一步的执行时间间隔比run状态的要长,可以确保两个打印语句的实际执行顺序。
所以,如果两个打印的语句执行的debug的时候,时间间隔很短,就有可能顺序颠倒。而在debug的时候,由于每一步的执行时间间隔比run状态的要长,可以确保两个打印语句的实际执行顺序。
#3
“如果两个打印的语句执行的debug的时候”应该是“如果两个打印的语句执行的时候”
#4
将System.err.println改为System.out.println就正常了.
依原有err的处理, 我本地:
未设断点时:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
设断点步进时:
File d:\javawork is 0 bytes Long !
File d:\javawork is a Directory !
关注!
依原有err的处理, 我本地:
未设断点时:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
设断点步进时:
File d:\javawork is 0 bytes Long !
File d:\javawork is a Directory !
关注!
#5
不同意2楼的观点, 我不设置断点连续运行十次, 就会出现十次:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
而不是随机顺序输出.
差异在于一个是out, 一个是err, 另:out的操作是同步操作, 而非异步.
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
而不是随机顺序输出.
差异在于一个是out, 一个是err, 另:out的操作是同步操作, 而非异步.
#6
我说的也是err,手顺写错了。
正是因为err是异步执行,所以在当两个打印语句放在一起执行的时候,如果时间间隔很短,才会有可能顺序乱掉
正是因为err是异步执行,所以在当两个打印语句放在一起执行的时候,如果时间间隔很短,才会有可能顺序乱掉
#7
5楼的朋友能讲出 为什么在运行程序时 system.err 会比system.out 先打印出来.(system.err 在system.out语句的后面啊). 还是比较迷惘!!!
#8
out输出是带缓冲的
带缓冲不会立即输出, 会等到缓冲满, 或者被调用System.out.flush()才输出.
你试试在System.out.println 后面跟一个 System.out.flush()
带缓冲不会立即输出, 会等到缓冲满, 或者被调用System.out.flush()才输出.
你试试在System.out.println 后面跟一个 System.out.flush()
#9
好象也没用, 缓冲是否输出, 要看操作系统是否允许。 程序没法控制.
#1
为什么没有人回答我的帖子啊,这问题比较,有供大家一起学习价值.
#2
原因在于使用System.out的时候,打印数据的线程和运行我们的程序的线程实际上不是同一个。到底谁先执行不是我们的程序可以控制的。
所以,如果两个打印的语句执行的debug的时候,时间间隔很短,就有可能顺序颠倒。而在debug的时候,由于每一步的执行时间间隔比run状态的要长,可以确保两个打印语句的实际执行顺序。
所以,如果两个打印的语句执行的debug的时候,时间间隔很短,就有可能顺序颠倒。而在debug的时候,由于每一步的执行时间间隔比run状态的要长,可以确保两个打印语句的实际执行顺序。
#3
“如果两个打印的语句执行的debug的时候”应该是“如果两个打印的语句执行的时候”
#4
将System.err.println改为System.out.println就正常了.
依原有err的处理, 我本地:
未设断点时:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
设断点步进时:
File d:\javawork is 0 bytes Long !
File d:\javawork is a Directory !
关注!
依原有err的处理, 我本地:
未设断点时:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
设断点步进时:
File d:\javawork is 0 bytes Long !
File d:\javawork is a Directory !
关注!
#5
不同意2楼的观点, 我不设置断点连续运行十次, 就会出现十次:
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
而不是随机顺序输出.
差异在于一个是out, 一个是err, 另:out的操作是同步操作, 而非异步.
File d:\javawork is a Directory !
File d:\javawork is 0 bytes Long !
而不是随机顺序输出.
差异在于一个是out, 一个是err, 另:out的操作是同步操作, 而非异步.
#6
我说的也是err,手顺写错了。
正是因为err是异步执行,所以在当两个打印语句放在一起执行的时候,如果时间间隔很短,才会有可能顺序乱掉
正是因为err是异步执行,所以在当两个打印语句放在一起执行的时候,如果时间间隔很短,才会有可能顺序乱掉
#7
5楼的朋友能讲出 为什么在运行程序时 system.err 会比system.out 先打印出来.(system.err 在system.out语句的后面啊). 还是比较迷惘!!!
#8
out输出是带缓冲的
带缓冲不会立即输出, 会等到缓冲满, 或者被调用System.out.flush()才输出.
你试试在System.out.println 后面跟一个 System.out.flush()
带缓冲不会立即输出, 会等到缓冲满, 或者被调用System.out.flush()才输出.
你试试在System.out.println 后面跟一个 System.out.flush()
#9
好象也没用, 缓冲是否输出, 要看操作系统是否允许。 程序没法控制.