首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -跨平台文件路径

Java -跨平台文件路径
EN

Stack Overflow用户
提问于 2020-01-10 11:09:17
回答 2查看 429关注 0票数 0

我正在尝试开发一个跨平台的应用程序,它也可以在桌面和安卓上使用JavaFX和胶子。

在运行时,我的代码在资源文件夹中创建一个序列化文件。我还需要从它读取和写入序列化的数据。

我设法在桌面上工作,但没有在android上工作。因为它有不同的文件结构。这就是为什么我试图动态获取文件路径的原因。

在运行时之前创建的现有资源文件(而不是修改的)在这两个平台上似乎都能正常工作。

我尝试使用new File("src/main/resources/folder/file.ser").getAbsolutePath();,并尝试从我的根文件夹访问它,比如:getClass.getResources("/folder/file.ser").getPath();。它们都可以在桌面(Windows)上正常工作,但不幸的是,Android并没有按文件路径找到文件。

另一个问题可能是我不应该在资源文件夹中创建运行时文件,但是应该在哪里创建呢?

你知道我怎样才能读和写运行时创建的文件,在android和桌面上都能工作吗?

(如果这些信息不足以帮助我,我尝试以最小的形式复制我的代码,并提供更多的细节。)

EN

回答 2

Stack Overflow用户

发布于 2020-01-10 11:29:53

我觉得你走错了路。一般情况下,创建或写入资源文件夹中的文件不起作用。其想法是将资源文件夹中的文件打包到jar文件中,或者以其他方式与应用程序捆绑在一起,并且在运行时不能写。

您应该做的是在程序第一次启动时创建一个应用程序文件夹。例如,桌面上的一个常见做法是在用户主目录中创建一个不可见的文件夹".myApp“。在其他平台上,比如Android,有其他特定于平台的命名和位置规则,但概念是相同的。第一次启动时,您还可以将必要的资源从资源文件夹复制到此应用程序文件夹中,以便在运行时编辑它们。

票数 2
EN

Stack Overflow用户

发布于 2020-01-10 11:30:04

资源文件在类路径上有一个路径,可以打包在jar中,应该被认为是只读的,特别是在某些情况下资源可能被缓存。他们是而不是 File。它们可以被URL、URI、Path捕获。路径是区分大小写的,路径分隔符是/

因此,资源只能用作模板,即初始文件。它们应该复制到应用程序外部的真实文件中。

代码语言:javascript
复制
Path path = Paths.get(System.getProperty("user.home"), ".myapp/file.ser");
Files.createDirectories(path.getParent());
if (Files.exists(path)) {
    URL url = MyClass.class.getResource("/folder/file.ser");
    Path template = Paths.get(url.toURI());

    Files.copy(template, path);
}

此外,.ser,一个序列化的java对象,不是一个好主意。我建议使用带有注释的JAXB的XML。更具可读性、可维护性、可版本性。在您所在的地方开发JRE与在客户端部署JRE之间没有冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59680493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档