需求:给盘符中的某个文件夹循环遍历下面的子文件夹全部文件夹图标改为熊猫图标。
需要做一个事:jpg图片转ico格式网上找工具即可。
技术点:
1、desktop.ini是系统可识别的一个文件,作用是存储用户对文件夹的个性设置(用户更换文件夹图标等等都会生成desktop.ini);
2、我们用到的desktop.ini文件中的内容:
[.ShellClassInfo]
IconFile=c:\logo.ico
IconIndex=0
说明:IconFile:指定文件夹图片的位置,其文件后缀可以是.exe、.ico、.dll
IconIndex:选择要使用文件中的第几个图标
3、attrib指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统.
此命令可以在DOS命令行下执行
例如:以下命令用于修改desktop.ini文件为系统文件,并隐藏:
C:>attrib C:\熊猫烧香\aa\desktop.ini +S +H
+S:代表将文件设置为“系统文件”;-S代表清除此文件的“系统文件”属性;
+H:代表将文件设置为“隐藏”;-H:代表清除此文件的“隐藏”属性;
4、在Java中,我们可以使用Runtime类的exec()方法执行attrib命令。
如果我们希望文件夹图标更改,则需要将文件夹设置为系统属性,将文件夹下的desktop.ini文件设置为系统属性并隐藏。
例如:
Runtime.getRuntime().exec("attrib +S +H C:\熊猫烧香\aa\desktop.ini”);
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Panda {
// public static void main(String[] args) throws IOException {
//
// //单个目录
// File root = new File("D:\\熊猫烧香_目录\\aa");
//
// File iniFile = new File(root,"desktop.ini");
// FileWriter out = new FileWriter(iniFile);
// out.write("[.ShellClassInfo]\r\n");
// out.write("IconFile=D:\\panda.ico\r\n");// 图标文件的路径
// out.write("IconIndex=0\r\n");// 选择要使用文件中的第几个图标
// out.close();
//
// // 对文件夹和图标文件设置系统属性
// Runtime.getRuntime().exec("attrib " +
// root.getCanonicalPath() + " +S");
// Runtime.getRuntime().exec("attrib " +
// iniFile.getCanonicalPath() + " +S +H");
// }
public static void main(String[] args) throws IOException {
//创建被熊猫烧香感染的文件夹目录
// File rootFile = new File("D:\\熊猫烧香_目录\\aa");
File rootFile = new File("D:\\aa");
virusPanda(rootFile);
}
//递归感染所有文件夹
public static void virusPanda(File dir) throws IOException {
//判断文件是否存在,如果不存在创建文件
if(!dir.exists()) {
dir.mkdirs();
}
// 在当前文件夹下面 建立图标隐藏文件
File iconFile = new File(dir, "desktop.ini");
FileWriter fw = new FileWriter(iconFile);
fw.write("[.ShellClassInfo]\r\n");
fw.write("InfoTip=熊猫烧香\r\n");
fw.write("IconFile=D:\\panda.ico\r\n");// 图标文件的路径
fw.write("IconIndex=0");// 选择要使用文件中的第几个图标
fw.close();
// 对文件夹和图标文件设置系统属性
Runtime.getRuntime().exec("attrib " +
dir.getCanonicalPath() + " +S");
Runtime.getRuntime().exec("attrib " +
iconFile.getCanonicalPath() + " +S +H");
//获取目录下所有文件对象
File[] listFiles = dir.listFiles();
//依次获取每一个文件对象,如果文件对象为文件则不处理,如果为文件夹,则递归调用感染病毒
for (File fileorDIR : listFiles) {
System.out.println(fileorDIR.getCanonicalPath());
if(fileorDIR.isDirectory()) {
virusPanda(fileorDIR);
}
}
}
}