簡體   English   中英

文件寫入jar中的資源文件夾

[英]File Write in resource folder in jar

我的 java swing 項目中有一個資源文件夾(文件),其中包含一個文本文件(users.txt),我正在將數據讀取和寫入該文本文件。 當我將它導出為 jar 文件時,從該文件中讀取是可以的,但在文件中寫入是有問題的。 我正在以這種方式從文件中讀取

InputStream in1 = getClass().getResourceAsStream("/files/users.txt"); 
BufferedReader reader1 = new BufferedReader(new InputStreamReader(in1));

在 jar 文件中讀取完全正常,並在代碼下面的同一個文件中寫入(這是 jar 文件的問題)

    File file = new File("src/files/users.txt"); 
    FileWriter fw = new FileWriter(file,true);
    fw.write(data+"\n");
    fw.close();

請幫助我如何使用 jar 文件寫入資源文件夾中的文件。 謝謝!

正如評論已經說過的,JAR 中的文件被認為是只讀的。

您必須在某個用戶或基於安裝目錄的位置(或用戶選擇的位置)創建一個文件。

如果您有預配置的數據,則至少有 2 個選項:

  • 使用某種打包工具(也可以是 ZIP 文件)將文件與 JAR 文件一起傳送。 對於 ZIP 文件,如果您使用的是 Maven,請查看 Maven Assembly Plugin。
  • 從 JAR 中提取文件。

對於后一個用例,我編寫了一些實用程序類:

public void extractResource(String resourcePathString, Path targetDirPath) throws IOException, URISyntaxException {  
    URI jarURI = JarFiles.getJarURI(SomeClassInTheJar.class);  
    try (FileSystem jarFS = JarFiles.newJarFileSystem(jarURI)) {  
        Path resourcePath = jarFS.getPath(resourcePathString);  

        CopyFileVisitor.copy(resourcePath, targetDirPath);  
    }  
}  

CopyFileVisitor的幫助下,您可以輕松地從/到 JAR 或 ZIP 文件中遞歸地提取/添加目錄,因為 CopyFileVisitor 使用PathUtils ,因此可以跨文件系統工作。

JarFiles.getJarURI獲取類的 JAR URI。

有關更多信息,請查看教程: https : //www.softsmithy.org/softsmithy-lib/lib/2.1.1/docs/tutorial/nio-file/index.html#ExtractJarResourceSample

該庫是開源的。 您可以從 Maven 中心獲取它:

        <dependency>
            <groupId>org.softsmithy.lib</groupId>
            <artifactId>softsmithy-lib-core</artifactId>
            <version>2.1.1</version>
        </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM