Search code examples
javaintellij-idea

How do you create a file within a Java artifact?


I am currently working on a Java application in Intellij, and I cannot create a file within my artifact. As an example, I'm using File to create a file within the source, which is MainMenuData.txt.

File mainMenu = new File("MainMenuData.txt");
        String absPath = mainMenu.getPath();
        mainMenu.createNewFile();
        BufferedReader br = new BufferedReader(new FileReader(absPath));

In this, I'm using File to make sure that file exists whenever it isn't.

Instead, I'd like to build within the (Production) artifact. Is that doable?

Anything helps. Thanks.


Solution

  • You could do that.

    I assume your artifact is a jar file, which is nothing else than a zip file. You can obtain the location of your jar file in the file system and use the Zip File System to modify it. However I'm not sure, if the jvm might have a problem with that and it might not work on windows, since windows likes to block files, that are in use. Also this would definitely fail, if your jar file is not stored locally.

    A better approach would be to store your data files at the appropriate location in your system.

    On Linux(and probably mac): <home>/.local/share/<your application name>/

    On Linux(global): /var/lib/<application name>

    On Windows(I think, better check it yourself): <appdata>/<your application name>

    Your code would look something like this(for Linux):

    File home = new File(System.getProperty("HOME");
    File configDirectory = new File(home, ".local/share/<application name>");
    configDirectory.mkdirs();
    File mainMenu = new File(configDirectory, "MainMenuData.txt");
    

    For windows do something similar. If you need both, you should check on which you are currently running.