当前位置: 代码迷 >> J2ME >> 关于files的异常
  详细解决方案

关于files的异常

热度:845   发布时间:2013-02-25 21:38:01.0
关于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);        }    }}
  相关解决方案