日期:2014-05-20  浏览次数:20741 次

关于files的错误
我写了一个程序 实现的内容是 一个文件夹下有很多文件夹 文件夹下又有文件夹 嵌套着 文件夹的名字中有空格 我想把空格去掉 写了个程序 但是 运行后总是有某些文件夹名字中的空格去不掉 下面是程序
Java code
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.awt.*;

public class Test6 {
    public static void main(String[] args) {
        File f = new File("I:\\11");
        renameFile(f);
    }

    public static void renameFile(File f) {
        int n = f.listFiles().length;
        List<String> files = new ArrayList<String>();
        try {
            for (int i = 0; i < f.listFiles().length; i++) {
            if (f.listFiles().length != 0) {
                    if (!(f.listFiles()[i].isFile())) {
                        files.add(f.getPath() + "\\"
                                + f.listFiles()[i].getName());
                        renameFile(f.listFiles()[i]);
                    }
                    
                }else {
                    files.add(f.getPath() + "\\"
                            + f.getName());
                }
            } 

        } catch (Exception e) {
            e.printStackTrace();
        }
        
        for (int i = 0; i <files.size() ; i++) {
            //System.out.println(files.get(i));
            File ff = new File(files.get(i));
            //String sNoSpace = files.get(i).replaceAll(" ", "");
            String sNoSpace = mergeSpace(files.get(i));
            System.out.println(sNoSpace);
            ff.renameTo(new File(sNoSpace));
            
        }
    }
    
    public static String mergeSpace(String s) {
        StringBuffer strBuf = new StringBuffer();
        String[] arrStr = s.split(" ");
        for (int i = 0; i < arrStr.length; i++) {
            if (!arrStr[i].equals(" ")) {
                strBuf.append(arrStr[i]);
            }
        }
        return strBuf.toString();
    }

}



------解决方案--------------------
file不懂,帮顶了
------解决方案--------------------
LZ有没有想到这个问题,比如
I:\\11\\a a a\\b b b
这样的路径,你在a a a这个文件夹的时候,会递归调用b b b文件夹改名
此时b b b的路径是I:\\11\\a a a\\b b b,经过mergeSpace后,路径是I:\\11\\aaa\\bbb
改名的时候,文件夹aaa不存在,也就是说bbb的父文件不存在,bbb又怎么能改变成功呢?
按你这个做法就必须先把bbb的父文件夹先改名了,即aaa先改名,然后才能bbb改名,所以你要在递归前先把父文件夹改名


------解决方案--------------------
根据你的程序改写了一下,不知能不能达到效果。
Java code

import java.io.*;
import java.util.*;
public class tmp1{
    public static List<String> files=new ArrayList<String>();
    public static void renameFiles(String f){
        File ff=new File(f);
        if(!ff.isDirectory()) {files.add(ff.toString());return;}
        String[] fl=ff.list();
        for(String s:fl){
            renameFiles(f+File.separator+s);
        }
    }
    public static String mergeSpace(String s) {
        StringBuffer strBuf = new StringBuffer();
        String[] arrStr = s.split(" ");
        for (int i = 0; i < arrStr.length; i++) {
            if (!arrStr[i].equals(" ")) {
                strBuf.append(arrStr[i]);
            }
        }
        return strBuf.toString();
    }
    public static void main(String[] args){
        renameFiles("I:\\11");
        for(String ss:files){
            String fs=mergeSpace(ss);
            System.out.println(fs);
        }
    }
}