我的目标是将我的电影库的每个文件夹的图标更改为Windows中使用Java的每个文件夹的图标。
每个文件夹都有一个256×256图标,以该文件夹命名,但具有适当的扩展名。 例如, 每秒5cm的文件夹中有5cm Per Second.ico文件。
我想我可以通过修改文件夹中的desktop.ini文件来做到这一点。 所有的文件夹中都有这个文件,因为每个文件夹中的图标曾经是文件夹的实际图标,但是当我更改了电影库的path后, desktop.ini中图标的path没有更新。
每个desktop.ini都是这样的:
[.ShellClassInfo] IconResource=F:\Anime\Movies\5cm Per Second\5cm Per Second.ico,0
现在图标所在的path是这样的: E:\电影\每秒5厘米\每秒5厘米,所以我想我所要做的就是将desktop.ini更改为:
[.ShellClassInfo] IconResource=E:\Movies\5cm Per Second\5cm Per Second.ico,0
这根本不工作,然后我想我也应该让Windows知道desktop.ini是一个系统文件,我把这个添加到我的代码,但是根本不工作。
我的示例文件夹的代码:
import java.io.File; import java.io.IOException; import org.ini4j.Wini; public class ListFiles { public static void main(String[] args) throws IOException { // Directory path here String path = "E:\\Movies\\5cm Per Second"; String fileName; File folder = new File(path); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { if ("ini".equals(getExtension(listOfFiles[i]))) { File theFile = listOfFiles[i]; Wini ini = new Wini(theFile); String iconPath = theFile.getParent() + ".ico"; String field = iconPath + ",0"; ini.put(".ShellClassInfo", "IconResource", field); Runtime.getRuntime().exec("attrib +H " + theFile.getAbsolutePath()); } } } } public static String getExtension(File theFile) { String extension = null; String fileName = theFile.getName(); int i = fileName.lastIndexOf('.'); if (i > 0 && i < fileName.length() - 1) { extension = fileName.substring(i + 1).toLowerCase(); } if (extension == null) { return ""; } return extension; } }
正如你所看到的,我将IconResource字段编辑为我需要使用的ini4j
库,然后将desktop.ini的属性更改为隐藏和系统。
看起来这是不够的,我真的不知道还有什么要做。
您不调用ini.store() ,这可能会将更改写入磁盘。