2016-03-15 41 views
0

在我的節目,我有一行代碼:的getResource()到路徑問題

Path toRead = new File(getClass().getResource("/data.txt").toString()).toPath(); 

每當我嘗試運行此我得到一個錯誤:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <:> at index 4 

因爲它似乎是一個正常的文件運行良好,但它作爲一個路徑它弄亂了,有沒有解決這個問題?

我需要它作爲路徑才能使用Files.copy()

data.txt所在的文件夾被添加爲源文件夾。

+1

對'getResource'的調用返回一個URL路徑('file:/ a/b/c/data.txt');它不是一個'File'路徑。 –

+0

@ElliottFrisch嗯,爲了使用'java.nio.file.Files.copy()',我需要把這個URL變成'java.nio.file.Path'。 –

+0

你不應該那樣做。如果文件被封裝在'.jar'文件中,則URL指向一個jar文件條目,因此它不能像「File」那樣訪問。 – Andreas

回答

1

你應該從來沒有假定從getResource()返回URL指的是一個文件。你應該只使用URL.openStream()。這實際上是getResourceAsStream()所做的。

try (InputStream is = getClass().getResourceAsStream("/data.txt")) { 
    Files.copy(is, targetPath); 
}