Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java—如何使应用程序引用自身?_Java_Macos_File_.app - Fatal编程技术网

java—如何使应用程序引用自身?

java—如何使应用程序引用自身?,java,macos,file,.app,Java,Macos,File,.app,我正在为mac构建一个在java上运行的应用程序,我需要它能够编辑自己的内容。因为,毕竟,应用程序只是一个美化的目录,所以我假设您可以使用它来更改其中的内容。但是这个应用程序是分布式的,我不知道用户希望将应用程序放在哪里。目前,我所做的所有文件引用都使用了文件(“path/from/user/to/application”),当然,这是假设您可以从用户主驱动器找到您的应用程序。有没有一种方法可以在不知道.app文件存储在哪里的情况下执行此操作?我在应用程序中的当前目录设置如下: app.app

我正在为mac构建一个在java上运行的应用程序,我需要它能够编辑自己的内容。因为,毕竟,应用程序只是一个美化的目录,所以我假设您可以使用它来更改其中的内容。但是这个应用程序是分布式的,我不知道用户希望将应用程序放在哪里。目前,我所做的所有文件引用都使用了
文件(“path/from/user/to/application”)
,当然,这是假设您可以从用户主驱动器找到您的应用程序。有没有一种方法可以在不知道.app文件存储在哪里的情况下执行此操作?我在应用程序中的当前目录设置如下:

app.app
Contents
|Info.plist
|PkgInfo
|---Resources
|   |icon.icns
|
|---MacOS
|   |JavaAppLauncher
|
|---Java
    |---app.jar
        |---package
            |classFile.class
            |---Folder
                |FileToEdit.xml

那么,有没有一种方法可以在不知道app.app在哪里的情况下在java代码(存储在classFile.class中)中查找和读取/更改FileToEdit.xml?

我想说,您所需要的只是指定从src文件夹开始的路径(从项目的文件夹角度看)

因此,如果您有类似以下内容:

src/FileToEdit.xml

然后,您需要做的就是使用/FileToEdit.xml,因为它位于类路径的根目录中

见此:

您可以使用
app.class.getClassLoader().getResourceAsStream(“package/FileToEdit.xml”)
访问程序中的文件,即使它打包在一个jar中。正如您所看到的,您不需要在那里使用完整路径,只需确保您的资源包含在构建路径中。这是为了读取文件。无法保证该文件是可写的

您可以使用临时文件执行您需要执行的操作。这些很可能是可写的。您可以使用原始的
FileToEdit.xml
文件作为临时文件的模板,然后使用

File file = File.createTempFile("FileToEdit.xml", null);
并使用该文件


但是,如果您确实想要持久化数据,那么您应该使用适当的数据库。

您可能能够获得一个“路径”,但不能保证它是由您可以更改的文件系统备份的。Java应用程序可以从WAR文件或只读网络运行。编写这样工作的应用程序肯定非常脆弱。应用程序可能更改的数据可能属于
~/Library
中的某个位置,而不是应用程序本身。我尝试做的是相对简单的。例如,我在mac电脑上看到一些游戏将文件数据存储在应用程序中。我尝试做的与此类似。我可以在项目中做得很好,但在应用程序中会有很大的不同。文件在启动后默认为用户(~),而不是src文件夹。