是否有一种在Java应用程序中创建临时目录的标准且可靠的方法?Java的问题数据库中有一个条目,在评论中有一些代码,但我想知道是否有一个标准的解决方案可以在其中一个常见的库(Apache Commons等)中找到?
可能重复:
获取本地应用程序数据目录路径的跨平台方式是什么?
我正在寻找一种方法来获取本地应用程序数据文件夹的位置,这是一个特殊的Windows文件夹,用Java.遗憾的是,以下内容仅适用于具有默认设置的英文版Windows XP:
System.getProperty("user.home") + "\\Local Settings\\Application Data"
Run Code Online (Sandbox Code Playgroud)
我想拥有的是.NET中的类似内容:
System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)
有没有办法在不必调用Windows Shell API的SHGetSpecialFolderLocation的情况下执行此操作?
我对Java Web Start的状态感到困惑.在Oracle的支持路线图中,我们可以读到:
支持部署技术
Web部署技术由Java插件和Web Start技术组成,具有更短的支持生命周期.对于通过Java SE 8的主要版本,Oracle为这些技术提供了五(5)年的Premier支持.扩展支持不适用于部署堆栈,并且不可用于Java SE 9以外的支持.有关详细信息,请参阅Oracle Lifetime支持策略.
可以在2017年6月之后的任何时候删除Java SE 6和Java SE 7的部署技术. 虽然部署堆栈可能包含在Java SE 9或更高版本中,但Java SE 8是部署堆栈的推荐且仅受支持的版本.
现在,我们已经知道applet和Java插件将在未来的Java版本中被删除,但我从来没有读过有关Java Web Start是删除的候选者.
在Oracle的Java平台标准版部署指南#Java入口(Java 9文档页面)中,Java Web Start被宣传为已弃用的applet技术的替代方案:
虽然JDK 9中提供并支持,但Applet API和Java插件在未来版本中标记为已弃用,准备删除.applet和嵌入式JavaFX应用程序的替代方案包括Java Web Start和自包含应用程序.
我什么都不担心,或者我错过了关于Java Web Start弃用的公告?
我有一个基于LWJGL的游戏引擎,要运行它我需要将所需的本机库放在用户的计算机上.在Windows上,我通过以下方式找到Application Data目录:
System.getenv("APPDATA");
Run Code Online (Sandbox Code Playgroud)
一切都很容易,很好.我创建一个File对象,必要时调用mkDir,如果文件不在机器上,则写入文件.
(注:创建的目录不应该是一个临时文件,因为我想为未来的运行.此外,保存提取文件,创建该目录给出了保存游戏和其他类似数据的简单和易于使用的文件夹.)
但是,如果计算机是Macintosh或Linux,我想做类似的事情,但我不熟悉如何使用这两个系统,我并没有真正处于良好的测试位置.我目前找到目标目录的方法是这样的:
private static String defaultDirectory()
{
String OS = System.getProperty("os.name").toUpperCase();
if (OS.contains("WIN"))
return System.getenv("APPDATA");
else if (OS.contains("MAC"))
return System.getProperty("user.home") + "/Library/Application "
+ "Support";
else if (OS.contains("NUX"))
return System.getProperty("user.home");
return System.getProperty("user.dir");
}
Run Code Online (Sandbox Code Playgroud)
那么,这是正确的方法吗?我正在尝试访问Mac上的应用程序支持(我已经知道这相当于Windows上的AppData文件夹)而我正在尝试在Linux上使用类似的文件夹,但我不确定是否"用户.家"找到正确的.
我正在使用Java Preferences API在swing/java应用程序中存储和检索小块信息.
现在我已经设置Java Web start从我的网页启动应用程序,我得到一个安全例外.为了摆脱这个异常,我必须提示用户权限.我拒绝这样做,因为我的应用程序不会做任何需要用户许可的事情.
这就是为什么我需要一个替代解决方案来存储从一个执行到另一个执行的几个键值.某种饼干或其他什么.你知道吗?
我有一个Java Swing应用程序,它包含一堆帧,而这些帧主要包含显示大量数据的表.由于在启动时安排所有窗口和表格总是麻烦且耗时,我想实现"工作区"功能,以便用户可以保存首选项设置,并在启动时选择自动加载存储的工作区将所有窗口和表格显示为先前保存的.具体来说,我希望存储在工作区中的设置是:
有没有人知道一个聪明而简单的方法来实现这一点,没有明显的,并且看起来是一个非常复杂和繁琐的解决方案,迭代所有打开的窗口并用Preferencesapi 保存每一条信息?谢谢
我有一个命令行Java应用程序,它在Windows 7 x64平台上读写文件.目前,应用程序与IBM Java SE 6一起运行.结构如下:
APP_ROOT
some_folder
jre
bin
lib
myjarfile.jar
appl_start.bat
Run Code Online (Sandbox Code Playgroud)
现在,我用解压缩的JRE 8包替换了jre文件夹.并且应用程序开始抱怨它无法在some_folder中"访问"(实际上是它的写操作)文件.如果我在APP_ROOT下手动创建新的some_folder_1并重新配置应用程序以使用它 - 应用程序运行正常.如果我删除新创建的some_folder_1并将some_folder重命名为some_folder_1 - 应用程序抱怨它无法访问它(即使在读取模式下).
如果我用JRE 6文件替换jre文件夹 - 应用程序开始工作正常.
尝试通过属性比较有效权限 - 所有看起来都一样,没有什么可疑的.UAC已打开,我正在工作并在常规用户下更换文件夹.
更新:我在Windows 7中关闭UAC并重新启动后,应用程序开始与JRE 8一起正常工作.但是我需要让它与UAC打开一起工作.将UAC恢复为打开并重新启动时 - 使用JRE 8的应用程序再次失败.此外,注意到似乎JRE 8无法在"C:\ Users\username\AppData\Local\VirtualStore\Program Files(x86)\"中创建正确的文件,它通常在程序尝试在Program Files中编写时创建.
更新2:做了更多的故障排除,并缩小了问题:
所以,我得出结论 - 由于某种原因,JRE 8无法将输出写入C:\ Program Files ...重定向到C:\ Users ...\VirtualStore
如何解决这个问题,所以JRE 8开始在JRE …
这似乎是一个绝对的新手问题,但是我对应该成为基本问题的问题y之以鼻。
我正在用Java编写一个简单的桌面应用程序。(实际上是Scala,但请通过。)它以Windows计算机为目标。我想将其打包并使其可运行,而无需创建安装程序,也无需弄乱Windows注册表。我想要一个配置文件,用户可以查找和编辑该配置文件以自定义设置。(例如,以SublimeText的用户首选项的方式。)
我设想以下结构:
my-application/
|- bin/
|- myApp.class (or myApp.jar, if you prefer)
|- files/
|- config/
|- config.json
|- output/
|- output.xlsx
|-runMyApp.bat
Run Code Online (Sandbox Code Playgroud)
在Eclipse内部,相对路径倾向于解析到myApplication/目录,但是如果我从命令行运行应用程序,则它们会解析为-cp参数。(通常是bin/目录。)
我天真吗?我是否完全弄错了范例?
在我看来,能够始终围绕可执行文件定位文件系统中的文件(资源)将是一件基本的事情。
请帮忙!
很抱歉,如果该标题的名称不正确,我想不出一种更好的短语表达方式,因此欢迎您进行修改。
我见过的大多数需要硬盘文件存储的应用程序都会根据操作系统在合适的位置创建一个文件夹。在Windows上,这些文件夹位于\ Users \ [当前用户] \ AppData \ [etc]中,在Mac上,这些文件夹位于/ Users / [当前用户] / Library / Application Support / [etc]中,Ubuntu具有与我类似的功能现在想不起来。
我想知道,如何在具有不同用户的不同操作系统中始终找到这些文件路径?至少在Java中,有没有一种简单的方法来实现此目的?
谢谢。