C盘瘦身记

  这个周五经手了好多资料,过程中偶然看到C盘盘符容量条变成了红色,顿时心里一紧,因为最近的确装卸过几个软件,但是记得之前还有好大空间的,怎么突然就没有了,随即开始了给C盘瘦身,360的那些工具没用过,也没想起来用优化大师,就直接自己写了程序分析了C盘的文件夹和文件:

  1、遍历文件获取文件和文件夹占用空间信息,

  2、重新整理整个统计列表,数据格式化,根据需求重新分析文件列表,查找占用空间大的文件夹及相关文件,

  1的实现:
  开始时也觉得遍历和统计C盘各文件的大小和路径的需求应该有人实现了,但是没找到,还是自己写了一个:

  (快有一年没写程序了,很多处理逻辑都忘了,代码不规矩的地方,还望多多担待,帮忙指正,)

  下面代码用java实现,完成第一步工作,

 1 public class Dir {
 2     
 3     public static ArrayList<FileSpace> fileList = new ArrayList<FileSpace>();
 4     
 5     public static void main(String[] args) {
 6         
 7         File dir = new File("C:/");
 8         if(!dir.exists()){//打开文件异常,健壮性检测
 9             throw new RuntimeException("文件不存在!");
10         }
11 
12         GetFileSpace(dir);
13         //需要对列表fileList进行去重,
14         ArrayList<FileSpace> fileList2 = new ArrayList<FileSpace>();
15         Iterator<FileSpace> it = fileList.iterator();
16         while(it.hasNext()){
17             FileSpace t = it.next();
18             if (!fileList2.contains(t)) {
19                 fileList2.add(t);
20             }
21         }
22         //2为目标数组
23         printList(new File("E:","FilesInfo2.txt"), fileList2);
24         
25         //输出结束标识
26         System.out.println("All Right.");
27     }
28 
29     private static double GetFileSpace(File dir) {
30         //直接递归计算文件夹及文件大小,输出到数组,
31         double len = 0;
32         File[] files = dir.listFiles();
33         try {
34             if (files == null){
35                 return 0;
36             }
37             
38         } catch (Exception e) {
39             
40             System.out.println("dir:"+dir);
41             System.out.println("files:"+files);
42         }
43         
44         for(File f: files){
45             if (f.isDirectory() && f.exists()) {
46                 //文件夹
47                 len = GetFileSpace(f) + len;
48 //                System.out.println("dir."+ f.getAbsolutePath()+ "..." + len);
49             }
50             else if (f.isFile() && f.exists()) {
51                 //文件
52                 len = f.length() + len;
53 //                System.out.println("file." + f.getAbsolutePath());
54             }
55 //            System.out.println("len++." + dir.getAbsolutePath()+"-----len:"+new DecimalFormat("#,##0.00").format(len));
56         }
57         
58         FileSpace fs = new FileSpace();
59         fs.path = dir.getAbsolutePath();
60         
61         fs.length = len;
62         fileList.add(fs);
63 //        System.out.println("7777."+ f.path+ "..." + f.length);
64 
65         return len;
66         
67     }
68     
69     private static void printList(File aimDir, ArrayList<FileSpace> list) {
70         BufferedWriter br = null;
71         try {
72             br = new BufferedWriter(new FileWriter(aimDir));
73             for(FileSpace f : list){
74 
75                 br.write(String.format("%012d",Math.round(f.length))+ "********" +f.path);
76                 br.newLine();
77                 br.flush();
78             }
79         } catch (IOException e) {
80             throw new RuntimeException("写入失败!");
81         }finally{
82             if(br != null){
83                 try {
84                     br.close();
85                 } catch (IOException e) {
86                     throw new RuntimeException("文件关闭失败!"); 
87                 }
88             }
89         }
90     }
91 
92 }
View Code

  之后实现2,用Python重新整理数据,计算容量,统计超过500M的文件夹,

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sun Nov 13 10:11:17 2016
 4 
 5 @author: Andy
 6 """
 7 def main():
 8     infile = open(r"E:/FilesInfo2.txt")
 9     
10     #000006929685********C:\Anaconda\tcl
11     
12     lines = infile.readlines()
13     infile.close()
14     
15     fileInfo = []
16     for l in lines:
17         space,path = l.split('********')
18         #大小限制
19         #限制为500M
20         if float(space) <= 536870912:
21             continue
22         #转换space到M,G级别
23         space = turnUnit(space)
24         fileInfo.append([space,path])
25     
26 #    print fileInfo
27     
28     #formatPrint(fileInfo)
29     outPut(fileInfo)
30     
31     
32 def outPut(fileInfo):
33     #将传入的列表输出到文件
34     ofile = open(r'E:\result_500M_2.txt','w')
35     outList = ''
36     fileInfo.reverse()
37     for l in fileInfo:
38         s = "%s---%s\n"%(l[0],l[1])
39         outList = outList+s
40         
41     ofile.write(outList)
42     ofile.close()
43     
44 def formatPrint(fileList):
45     #逐条输出列表数据,
46     for l in fileList:
47         print "%s---%s"%(l[0],l[1])
48     
49 def turnUnit(number):
50     #将传入的KB转换为MB或者GB单位,
51     result = ''
52     #1、测试是否可以转化为GB
53     GB = round(float(number)/(1024*1024*1024),2)
54     if GB > 0.5:
55         result = str(GB) + "GB"
56     else:
57         #2、测试是否可以转化为MB
58         MB = round(float(number)/(1024*1024),2)
59         if MB > 0:
60             result = str(MB) + "MB"
61         else:
62                 result = str(float(number)) + "B"
63     return result
64         
65         
66 main()
View Code

  这样就拿到一个数据量不太大的文件了,已经将C盘大于500M的文件夹列出了,但是没列出相关文件,需要相关文件信息的话可以用处理文件夹相同的方法,格式化一下字符串信息存放到文件信息列表里。

  遇到的问题及解决方案:

  因为好久没写逻辑代码了,所以遇到不少问题,好在都处理了,代价嘛,花了两天时间,

  1、文件夹和文件的遍历逻辑,

  开始就想到了用递归遍历一遍就得出所有数据,不用多次迭代,也试过创建新类来实现,试了两次,始终没找到好的处理文件夹那种多层反复迭代包含的遍历方法,最终还是用了计算哪个文件夹大小,就重新遍历其子文件夹和文件的方法,最后统计列表里有好多重复项,只得再写去重函数处理,

  2、有一个难点就是在处理java中对double类型执行=+失败,

  是用=+对当前遍历的子文件夹和文件的大小进行连加,但是计算过程中到最后一个连加时就会丢失之前的计算结果,只保留最后一次获取的文件大小数据。这个问题处理了好久,始终想不明白,最后觉得可能出问题的地方都用替代方案试了,最后试到A=+B改成A=B+A时,程序正常了,原因不明,不知道是因为数据太长还是堆栈太高导致的,

 

  发现的问题:

  1、猎豹浏览器的C盘文件中放了一个4G+的flash插件,简直不敢相信,但是还不敢删,已向官方发起提问,

  2、Tencent,简直就是个流氓,在C盘的文件中存放了很多广告数据和图片,没猜错的话,他将针对用户的行为分析数据也放在了C盘;此外,WeiChat的桌面版还把所有聊天记录的图片、表情、文件、视频以及其他所有聊天数据全部放到了C盘,

  3、N显卡问题。因为实验需要本来想配置N卡用来做GPU加速的,结果CUDA并没有配置成功,之后卸载了,之后重装了显卡驱动,结果C盘出现了好多这个显卡的数据文件,还不敢删,呵呵,

  4、Win7补丁和更新问题。找到Windows下很多数据文件都很大,但是都出现在关键文件夹下,不知道是不是冗余文件,也不敢删除,Windows和N卡一样,每次更新会重新下载需要的程序,而且还保留原来的,安装完也不做统一删除,就在C盘里放着,真是够了,

 

  怪不得很多人一年就重装系统,但是我系统涉及系统盘的软件太多了,安装麻烦,依赖调试更麻烦,轻易不想重装。这次重点对一些文件进行了转储,删除了部分文件,想调整虚拟内存的,但是一动系统主题就变回经典版,不知道怎么回事,

  就这些了,明天或者今晚开始,需要做一些正事了,忙完这一阵——接着忙下一阵……

  一个N/A显卡驱动残留瘦身攻略,不知道是否有用,

posted @ 2016-11-13 20:57  十点  阅读(441)  评论(0)    收藏  举报