2013-01-31 27 views
0

我已經使用this reference來讀取我項目中的文件。但我需要存儲同樣我不知道如何做到這一點?請幫幫我。在任何計算機中存儲文件的相對路徑 - Java

用於讀取文件我已經採取了代碼的鏈接

InputStream csv = 
      SomeClassInTheSamePackage.class.getResourceAsStream("filename.csv"); 

像這樣任何人都可以幫我寫一個文件

我目前使用此代碼:

Writer output = null; 
output = new BufferedWriter(new FileWriter("./filename.csv")); 

但將在運行時FileNotFound異常

問題與1-找到文件路徑。它工作正常,如果我給絕對路徑。但它需要在任何計算機上運行

+1

你有沒有嘗試寫入''filename.csv'而不是''./file.csv'?? – bernie

+0

是的,它不工作 – FreshBits

+0

@bernie如果'someClassInTheSamePackage'不在當前包中? –

回答

0

FileWriter將根據需要創建文件。它不一定已經存在。

如果當前工作目錄不再存在,或者您沒有在目錄中創建文件的權限,則可以獲取此錯誤的唯一方法。

0

檢查您的權限:

Writer output = null; 
if (new File("./filename.csv").canWrite()) { 
    System.out.println("You have not permissions"); 
} else { 
    output = new BufferedWriter(new FileWriter("./filename.csv")); 
    ... 
} 
+0

問題在於查找文件路徑。它工作正常,如果我給絕對路徑。但它需要在任何計算機上運行 – FreshBits

0

OK..Use下面的代碼來獲取文件的路徑:

String path = System.getProperty("user.dir"); 
FileWriter fw = new FileWriter(path+File.separator+"filename.csv"); 

編輯

這裏是一個演示代碼在包myPackage中創建文件"pqr.txt"。假設我正在使用命令java myPackage.AccessCheck執行類文件,即從mypackage上方的一個目錄執行。

package myPackage; 
import java.io.FileWriter; 
import java.io.File; 
public class AccessCheck 
{ 
    protected void callme() 
    { 

     try 
     { 
      String name = System.getProperty("user.dir")+File.separator+AccessCheck.class.getPackage().getName()+File.separator+"pqr.txt"; 
      System.out.println(name); 
      FileWriter fw = new FileWriter(name); 
     }catch(Exception ex){ex.printStackTrace();} 
    } 
    public static void main(String st[]) 
    { 
     AccessCheck asc = new AccessCheck(); 
     asc.callme(); 
    } 
} 
+0

我沒有得到File.separator – FreshBits

+0

'File.separator'給出了'system-dependent'默認'name-separator'字符串。例如:在Microsoft Windows系統上,它是「\」'(c:\ abc)'。而在UNIX系統中,該字段的值是「/」。在這裏觀看關於此的更多信息:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#separator –

+0

它不起作用得到相同的文件未找到豁免 – FreshBits

0

與其說getResourceAsStream()的,叫class.getResource()classLoader.getResource()。這些函數返回一個給出資源位置的URL。如果資源是文件系統上的純文件,則URL將爲file: URL。

擁有該網址後,您可以將其轉換爲URI並將其傳遞給採用URI的File構造函數。然後您可以使用File對象來打開文件。

請注意,getResource()可以返回File構造函數無法處理的URL。例如,如果資源在一個jar文件中,然後將URL可能看起來是這樣:

jar:file:/C:/path/to/JDK/lib/vm.jar!/java/lang/Object.class 

File構造無法處理這樣的URL。這可能會或可能不會成爲您的擔憂。