我的目标是将我的电影库的每个文件夹的图标更改为我在Windows中使用Java的每个文件夹的图标。
每个文件夹中都有一个256x256图标,以文件夹命名,但具有相应的扩展名。 例如,名为每秒5厘米的文件夹中包含 5cm Per Second.ico 文件。
我想我可以通过修改文件夹中的 desktop.ini 文件来完成此操作。所有文件夹都包含该文件,因为每个文件夹中的图标曾经是文件夹的实际图标,但在我更改了电影库的路径后, desktop.ini 中的图标路径没有得到更新。
每个 desktop.ini 都是这样的:
[.ShellClassInfo]
IconResource=F:\Anime\Movies\5cm Per Second\5cm Per Second.ico,0
现在图标所在的路径是: E:\ Movies \ 5cm Per Second \ 5cm Per Second.ico 所以我想我所要做的就是更改 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 隐藏和系统。
看起来这还不够,我真的不知道还能做什么。