为什么这段代码返回零长度的“BufferedReader”?

时间:2013-02-22 18:56:03

标签: java

此代码是从教程网站粘贴的,并不适用于我的机器(win7-amd64)!顺便说一句,我想运行此代码以获取公共文件的创建日期/时间。

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cmd /c dir c:\\logfile.log /tc");
BufferedReader br =
   new BufferedReader(new InputStreamReader(proc.getInputStream()));
String data = "";
for (int i = 0; i < 6; i++) {
   data = br.readLine();
}
System.out.println("Extracted value : " + data);
//split by space
StringTokenizer st = new StringTokenizer(data);
String date = st.nextToken();//Get date
String time = st.nextToken();//Get time
System.out.println("Creation Date  : " + date);
System.out.println("Creation Time  : " + time);

3 个答案:

答案 0 :(得分:0)

文件logfile.log不存在,BufferedReader正好读取4行。第五次尝试它返回null。所以data为空。

答案 1 :(得分:0)

问题是命令:

dir c:\\logfile.log /tc

返回的行数多于您想要的行数! 尝试打开一个CMD和一个你自己命令的exec。你会看到类似的东西:

 Volume in drive C has no label.
 Volume Serial Number is XXXX-XXXX

 Directory of C:\

22/02/2013  12:00              XXXX logfile.log
               1 File(s)          XXXX bytes
               0 Dir(s)  XXX.XXX.XXX.XXX bytes free

所以你需要忽略第一条线。 我建议你做的是使用一个能够使用readLine()方法和过滤器的阅读器,只使用包含文件名的行。

答案 2 :(得分:0)

  

我想运行此代码以获取公共文件的创建日期/时间。

如果您可以使用Java 7,则可以通过Files.readAttributesBasicFileAttributes.creationTime

获取创建日期