0

我有一个问题不能自己解决。
我是 JAVA 的大佬。

我不知道这个问题的解决方案。但我想我知道这个问题何时发生。所以,我已经解决了这个问题。但我想要另一个解决方案,因为我的解决方案也有另一个问题。我必须减少处理时间。

  String intDir="C:\\RNE_IN";  

 while(true) {

        File interfaceDirectory = new File(intDir);
        String[] arrayfiles = interfaceDirectory.list(new FBMFileFilter());

        for(String f : arrayfiles){

    String filename = String.format("%1$s%2$s%3$s", intDir,File.separator,f);


        File file = new File(filename);

        FileInputStream stream = null;  

         System.out.println(file.canExecute());  // true    
         System.out.println(file.canRead());     // true    
    System.out.println(file.exists());   // true    
          System.out.println(file.isFile());     // true 
          System.out.println(file.length());    // call full bytes of file 


        // I can control NPE with this Thread sleep Time.         
        Thread.sleep(1);

        // It occurs when Stream is constructed in the below.         
        stream = new FileInputStream(file);



        FBMDeviceOnlyParser onlyparser = new FBMDeviceOnlyParser(); 

         onlyparser.ParseDeviceNameOnly(stream);    

        String onlydevice = onlyparser.getDeviceName();
        String onlystepseq = onlyparser.getStepSeq();
      }
    }               

在上面的片段中,我认为文件没有问题。文件状态始终为真,并且 file.length 是完整字​​节,无论异常。但是,在无限循环中,如果我从另一个目录复制并粘贴到 intDir ,则会发生“NullPointerException”。

当 Thread.sleep(time) 超过 1000ms 时,NPE 不会发生。由于处理时间,我想删除“Thread.sleep()”代码。

如果在程序启动前intDir中有文件,则程序没有问题(不会发生NPE)

我想检查文件或 FileInputStream 状态是否不会发生 NPE。

谢谢你的关心。

4

3 回答 3

1

你的问题很难理解,但我可以告诉你一个不可能得到的事实:

java.lang.NullPointerException at Apeiron.MainEntry.main(MainEntry.java:179) Exception in thread "main" 
java.lang.NullPointerException at Apeiron.MainEntry.main(MainEntry.java:260)

如果第 179 行是这一行:

stream = new FileInputStream(file);

以下其中一项必须是:

  • 你给了我们一个不完整的堆栈跟踪,或者
  • 您告诉我们异常的位置不正确,或者
  • 您实际上根本没有执行该代码;例如,您在更改代码后没有正确重建代码。
于 2011-03-28T09:58:03.880 回答
0

这个怎么样:

String intDir="C:\\RNE_IN";  
File interfaceDirectory = new File(intDir);
while(true) {
  for(File file : interfaceDirectory.listFiles(new FBMFileFilter())) {
    System.out.println(file.canExecute());  // true    
    System.out.println(file.canRead());     // true    
    System.out.println(file.exists());      // true    
    System.out.println(file.isFile());      // true 
    System.out.println(file.length());      // call full bytes of file 

    final FileInputStream stream = new FileInputStream(file);
    try {
      FBMDeviceOnlyParser onlyparser = new FBMDeviceOnlyParser(); 
      onlyparser.ParseDeviceNameOnly(stream);    
      String onlydevice = onlyparser.getDeviceName();
      String onlystepseq = onlyparser.getStepSeq();
    } finally {
      stream.close();
    }
  }
}

我做了几件事 - 1. 摆脱了不必要的文件名生成 2. 最后尝试释放文件句柄资源

顺便说一句,我的猜测是你的睡眠允许终结器运行。

于 2011-03-28T19:15:59.367 回答
0

您可能迟早会用完文件句柄。完成后关闭 FileInputstream。

除此之外,解释你真正想用你的代码做什么(而不是把 CPU 使用率推到最高点)。

于 2011-03-28T09:55:47.673 回答