2011-06-07 71 views
2

我有下面的代碼。在java中的文件處理

以下源代碼來自文件x.java。 hi.html與x.java存在於同一個目錄中。

即使該文件存在,我也會收到文件未找到異常。我錯過了什麼嗎?

public void sendStaticResource() throws IOException{ 
    byte[] bytes = new byte[1024]; 
    FileInputStream fis = null; 

    try{ 
     File file = new File("hi.html"); 

     boolean p = file.exists(); 

     int i = fis.available(); 

     fis = new FileInputStream(file); 

     int ch = fis.read(bytes, 0, 1024); 

     while(ch!=-1){ 
      output.write(bytes, 0, ch); 
      ch = fis.read(bytes, 0, 1024); 
     } 

    }catch(Exception e){ 
     String errorMessage = "file not found"; 
     output.write(errorMessage.getBytes()); 
    }finally { 
     if(fis != null){ 
      fis.close(); 
     } 

    } 

} 
+3

添加e.printStackTrace()到您的程序,並在這裏 – emeraldjava 2011-06-07 17:44:41

+2

發佈細節一件事,你正趕上* *所有異常和寫作「找不到文件」作爲輸出,儘管很可能你正在捕捉一個不同的異常。嘗試打印出您的catch循環中的堆棧跟蹤。 – Kyle 2011-06-07 17:45:16

+0

什麼是真正的異常消息? e.getmesssagetext()?它真的是一個沒有發現異常的文件,還是隻是爲您的字符串文本重現另一個異常類型? – Omnaest 2011-06-07 17:46:32

回答

4

.java文件的目錄不一定是您的代碼運行的方向!您可以通過例如檢查程序的當前工作目錄:

System.out.println(System.getProperty("user.dir")); 

您可以使用System.getProperty(「user.dir來」)的字符串,使您的相對文件名絕對的!只需在文件名前加上:)

3

看看你的「user.dir」屬性。

String curDir = System.getProperty("user.dir"); 

這就是程序將其根爲不具有完整路徑的文件搜索。

0
  • 在捕捉異常之前捕捉FileNotFoundException,以確保它是真正的異常類型。
  • 由於您沒有給出從您的工作目錄搜索的文件的絕對位置。您可以將絕對路徑存儲在屬性文件中,然後使用該路徑,或使用System.getProperty("user.dir")從中返回運行Java應用程序的目錄。

代碼來獲取鍵值從屬性文件

private void getPropertyFileValues() { 
    String currentPath = System.getProperty("user.dir") + System.getProperty("file.separator") + "Loader.properties"; 
    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(currentPath); 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
    Properties props = new Properties(); 
    try { 
     props.load(fis); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    String filePath= props.getProperty("FILE_PATH"); 
    try { 
     fis.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 
0

我猜你會得到一個NullPointerException

FileInputStream fis = null; 

則呼叫:

int i = fis.available(); 

將導致在一個NullPointerException作爲冷杉牛逼非空分配fis後來是:

fis = new FileInputStream(file); 
+0

雅我修正了..我在這裏發佈了錯誤的代碼。 – vinoth 2011-06-07 18:18:45

0
File Handling in Java: 

Use File class for Representing and manipulating file or folder/directory. 
    you can use constructor : 
    ex. File file = new File("path/file_name.txt"); 
      or 
     File file = new File("Path","file_name"); 

File representation example: 

import java.io.File; 
import java.util.Date; 
import java.io.*; 
import java.util.*; 

public class FileRepresentation { 
    public static void main(String[] args) { 
    File f =new File("path/file_name.txt"); 
    if(f.exists()){ 
     System.out.println("Name " + f.getName()); 
     System.out.println("Absolute path: " +f.getAbsolutePath()); 
     System.out.println("Is writable " +f.canWrite()); 
     System.out.println("Is readable " + f.canRead()); 
     System.out.println("Is File " + f.isFile()); 
     System.out.println("Is Directory " + f.isDirectory()); 
     System.out.println("Last Modified at " + new Date(f.lastModified())); 
     System.out.println("Length " + f.length() +"bytes long."); 
    }//if 
    }//main 
}//class 
+0

歡迎。你應該添加一個簡短的解釋,給出一些關於你附加的腳本的細節 – 2017-08-16 10:24:58

0
Write data character by character, into Text file by Java: 

use FileWriter Class- 


import java.io.FileWriter; 
import java.io.PrintWriter; 
import java.io.Writer; 

    public class WriteFile { 

    public static void main(String[] args) throws Exception{ 
     //File writer takes chars and convert into bytes and write to a file 
     FileWriter writer = new FileWriter("path/file_name.txt"); 
     //if file not exits then created it, else override data 
      writer.write('A'); 
      writer.write('E'); 
      writer.write('I'); 
      writer.write('O'); 
      writer.write('U'); 

      writer.close(); 
    System.out.println("Successfully Written"); 
} 
}