不正确的文件路径

问题描述:

我不知道为什么,但outStream = new FileOutputStream(file)inStream = new FileInputStream(new File(file1.getName()))抛出异常。我不知道该怎么做。不正确的文件路径

这里是这样的代码:

 File tempf = new File(cmds[1]); //cmds is a String with filename cmds[1] and pathname cmds[2] where to move the file 
     File tempw = new File(cmds[2]); 
     if(!tempf.isAbsolute() || !tempw.isAbsolute()){//here i make paths absolute 
      tempf = new File(tempf.getAbsolutePath()); 
      tempw = new File(tempw.getAbsolutePath()); 
     } 
     String from = cmds[1]; 
     String where = cmds[2]; 
     File file1 = tempf; 
     File file2 = new File (tempw.toString() + "/" + new File(cmds[1]).getName()); 
     InputStream inStream = null; 
     OutputStream outStream = null; 
     try { 
      inStream = new FileInputStream(new File(file1.getName())); //throws an exception 
      outStream = new FileOutputStream(file2); //throws an exception too 
      byte[] buffer = new byte[16384]; 
      int length; 
      while ((length = inStream.read(buffer)) > 0) { 
       outStream.write(buffer, 0, length); 
      } 

      if (inStream != null) 
       inStream.close(); 
      if (outStream != null) 
       outStream.close(); 
      file1.delete(); 

     } catch (IOException e) { 
      System.err.println("permission denied"); 
     } 
    } else { 
     System.err.println("incorrect syntax"); 
    } 
    continue; 
} 

看起来一切都应该工作正常,但事实并非如此。我越来越

java.io.FileNotFoundException: C:\Users\Maxim\IdeaProjects\Testing\OneDrive\1234.txt 

但是,正如我所看到的是错误的道路。真正的路径是C:\Users\Maxim\OneDrive

UPD!发现问题是getAbsolutePath()返回项目所在的路径,但它不是我需要的路径。我需要C:\Users\Maxim\OneDrive但它返回C:\Users\Maxim\IdeaProjects\Testing\OneDrive但是! .../Testng没有OneDrive!

+0

显示EXCEPTION !!! – Parth 2014-10-06 15:24:08

+0

关于例外情况,尤其是标准库的情况,最重要的是他们会告诉你为什么会发生这种情况。 – 2014-10-06 15:24:17

FileInputStream和FileOutputStream的构造函数在访问文件时存在问题(如不存在)会抛出错误。要阻止它抛出FileNotFoundException,请确保在实例化FileInput/OutputStream对象之前创建该文件。

try{ 
    FileInputStream fis = new FileInputStream(file); 
}catch(FileNotFoundException e){ 
    e.printStackTrace(); 
} 

请看文档here