私の目標は、ムービーライブラリのすべてのフォルダのアイコンを、Javaを使用してWindowsのすべてのフォルダにあるアイコンに変更することです。
すべてのフォルダには、フォルダにちなんで名付けられた256x256のアイコンがありますが、適切な拡張子が付いています。たとえば、5cmPerSecondというフォルダには5cmPerSecond.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
それはまったく機能しませんでした。それから、desktop.iniがシステムファイルであることをWindowsに知らせる必要があると考えました。これをコードに追加しましたが、まったく機能しませんでした。
そのサンプルフォルダの私のコード:
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;
}
}
ご覧のとおり、IconResourceini4j
フィールドをライブラリを使用するために必要なフィールドに編集してから、 desktop.iniの属性をHiddenandSystemに変更します。
これでは不十分なようで、他に何をすべきか本当にわかりません。