我正在開發一個創建新項目嚮導的Eclipse插件。在工作區中創建這樣的新項目時,我需要它將文件夾及其後代從插件複製到工作區中剛創建的項目。問題是,雖然項目是IResource
,但插件文件夾位於文件系統中。如何以編程方式將文件夾從插件複製到工作空間中的新項目?
我成功地獲取了我需要複製的源插件文件夾的URL,並且擁有IProject參考。
我需要知道的是:如何將前者複製到後者中?
我正在開發一個創建新項目嚮導的Eclipse插件。在工作區中創建這樣的新項目時,我需要它將文件夾及其後代從插件複製到工作區中剛創建的項目。問題是,雖然項目是IResource
,但插件文件夾位於文件系統中。如何以編程方式將文件夾從插件複製到工作空間中的新項目?
我成功地獲取了我需要複製的源插件文件夾的URL,並且擁有IProject參考。
我需要知道的是:如何將前者複製到後者中?
查看this answer查看如何獲取文件/文件夾「out of」插件。
然後使用InputStream
創建項目,並設置文件內容的新文件/文件夾:
void copyFiles (File srcFolder, IContainer destFolder) {
for (File f: srcFolder.listFiles()) {
if (f.isDirectory()) {
IFolder newFolder = destFolder.getFolder(new Path(f.getName()));
newFolder.create(true, true, null);
copyFiles(f, newFolder);
} else {
IFile newFile = destFolder.getFile(new Path(f.getName()));
newFile.create(new FileInputStream(f), true, null);
}
}
}
這是不可能的,也不一定是知道的文件(你不能在孩子迭代)。不要使用帶有文件和子文件夾的文件夾,而要使用該結構創建一個zip文件,並在工作區中解壓zip(這應該保留所需的結構)。
這是一個很好的建議謝謝。如何以編程方式解壓縮? – Sindico 2012-01-10 08:09:45
一個好的起點是http://stackoverflow.com/a/1303771/173101中的代碼片段,或者使用http://java.sun.com/developer/technicalArticles/Programming/compression/ – 2012-01-10 08:18:55
上的文檔@Silli Eclipse'如果需要,FileLocator.toFileURL()'將爲你解壓文件**。 – 2012-01-10 13:24:16
是的,我確實設法從一個插件中獲取一個文件夾,但我實際上需要複製一個文件夾和子文件夾,而不僅僅是一個文件。我猜InputStream我只能複製文件內容而不是整個文件夾(和相關內容)。有什麼建議? – Sindico 2012-01-09 21:02:52
@Silli一個小的遞歸會有幫助。 – 2012-01-09 22:26:09
該軟件包是否需要解壓縮以便能夠從中讀取文件? – 2014-10-07 10:50:27