可以更改用户音乐,图片等目录。为此,请转到Windows资源管理器,右键单击“音乐”并转到路径。
在这里你可以看到,我把我的音乐移到了另一个硬盘上。
现在问题:如何用Java获取此目录?
因为System.getProperty("user.home").concat("\\Music")
导致“C:\ Users \ GG \ Music”而不是“D:\ GG \ Music”。
更新
由Anders回答:
对我有用的方法是以下3行代码:
char[] pszPath = new char[WinDef.MAX_PATH];
Shell32.INSTANCE.SHGetFolderPath(null, ShlObj.CSIDL_MYMUSIC, null, ShlObj.SHGFP_TYPE_CURRENT, pszPath);
File f = new File(String.valueOf(pszPath).trim());
答案 0 :(得分:1)
正如下面的讨论中指出的那样,使用注册表值的解决方案并不是很好,很可能无法正常工作。您不应该阅读注册表,因为它仅用于存储这些值的Windows。更可编程的界面将是shell,您可以通过键入SHGet*Folder*
来获取相同的信息。此功能记录在here
感谢@Anders和@IInspectable提到了这一点。
一开始我错了,因为我建议的解决方案首先在我的电脑上工作,所以我认为它会没问题。事实证明这只是一个巧合。
答案 1 :(得分:1)
在Windows上获取特殊文件夹路径的正确方法是使用---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-1-c9c9444b3a7f> in <module>()
11
12 anApp = MyApp()
---> 13 anApp.load_a_model()
14 anApp.run()
<ipython-input-1-c9c9444b3a7f> in load_a_model(self)
8 def load_a_model(self):
9 panda_file = Filename.fromOsSpecific('models\\myModel')
---> 10 obj_model = self.loader.loadModel(panda_file)
11
12 anApp = MyApp()
C:\Panda3D-1.9.3-x64\direct\showbase\Loader.pyc in loadModel(self, modelPath, loaderOptions, noCache, allowInstance, okMissing, callback, extraArgs, priority)
168 if not okMissing and None in result:
169 message = 'Could not load model file(s): %s' % (modelList,)
--> 170 raise IOError, message
171
172 if gotList:
IOError: Could not load model file(s): [Filename('models/myModel')]
常量(在您的情况下为CSIDL_*
)调用SHGetFolderPath
之类的shell函数。
您需要在Java中使用JNI或JNA来执行此操作。可以找到示例here和here。
为了完整起见,请从注册表中读取not the correct way来执行此操作...