我写了一个程序 实现的内容是 一个文件夹下有很多文件夹 文件夹下又有文件夹 嵌套着 文件夹的名字中有空格 我想把空格去掉 写了个程序 但是 运行后总是有某些文件夹名字中的空格去不掉 下面是程序
- 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); } }}