如何获取用户音乐目录?

时间:2017-05-23 13:32:54

标签: java windows windows-10

可以更改用户音乐,图片等目录。为此,请转到Windows资源管理器,右键单击“音乐”并转到路径。

German Screenshot

在这里你可以看到,我把我的音乐移到了另一个硬盘上。

现在问题:如何用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());

2 个答案:

答案 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来执行此操作。可以找到示例herehere

为了完整起见,请从注册表中读取not the correct way来执行此操作...