2

私の目標は、ムービーライブラリのすべてのフォルダのアイコンを、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に変更します。

これでは不十分なようで、他に何をすべきか本当にわかりません。

4

1 に答える 1

3

おそらく変更をディスクに書き込むini.store()を呼び出していません。

于 2012-10-07T02:49:44.797 に答える