Windows操作系统中“源路径太长”问题的解决办法
来源:互联网 发布:手机助手 for mac 编辑:程序博客网 时间:2024/06/07 17:39
windows中默认的文件名和路径名是有长度限制的。过长了就出错了,但有时候不小心系统中就多出来较深层次的目录。如下图所示:
java程序中,一般会递归调用删除方法来删除文件和目录,但递归的层次是有限制的,一般会出错而无法删除较深目录。
本文通过在递归模式上稍做修改,实现了较深层次的目录的删除。具体代码如下:
import java.io.File;import java.io.IOException;import java.util.List;import java.util.ArrayList;/** * @Author ... * @Date 2017.10.1 * */public class Delete { public static final int MAX_DOT_NUM = 30; public static List<File> fileList = new ArrayList<File>(); public static void main(String[] args) {if( args.length < 1 ){System.out.println("实现功能:删除指定的文件、文件夹及其包含的文件和子目录列表(对Windows操作系统不支持的层次较深的目录也有效)。");System.out.println();System.out.println("命令格式:java Delete [filename | pathname]");//[drive:][path][filename]System.out.println("\tfilename\t文件名");System.out.println("\tpathname\t目录名");System.out.println();System.out.println("示例:");System.out.println("\tjava Delete d:\\test.txt");System.out.println("\tjava Delete \"d:\\hello world\"");System.out.println("\t说明:文件夹包含空格符号时,请用引号将文件名或目录名括起来");System.out.println();return;}try{System.out.print("开始处理,请耐心等待...");long startTime=System.currentTimeMillis();int count = delete(args[0]); long stopTime=System.currentTimeMillis(); System.out.print("处理结束,处理文件(或目录)" + count + "个,");System.out.println("花费时长:"+((stopTime-startTime)/1000)+"秒");}catch(Exception ex){ex.printStackTrace();} } /** * 删除指定名称的文件或文件夹(包含其子文件夹和文件) * * @param filename 文件或文件夹名称 * @throws IOException */ public static int delete(String filename) throws IOException{int count = 0;boolean bPlayMovies = true;//设为false时关闭删除时的动画;File f = new File(filename);if( !f.exists() ){System.out.println( "\r\n指定的文件或文件夹" + f + "不存在!");return 0;}fileList.add(f);boolean isplus = false;while( fileList.size()>0 ){if( bPlayMovies ){if( count % MAX_DOT_NUM == 0 ){isplus = !isplus;}}File tmp = fileList.get(fileList.size()-1);if( tmp.isDirectory() ){//处理文件夹File[] files = tmp.listFiles();if( files.length > 0 ){//如果该文件夹下包含文件或子文件夹for(File file : files){fileList.add(file);}} else{fileList.remove(fileList.size()-1);//System.out.println("删除文件:"+tmp);tmp.getAbsoluteFile().delete();count++;if( bPlayMovies ){playMovies( isplus );}}}else{//处理文件fileList.remove(fileList.size()-1);//System.out.println("删除文件:"+tmp);tmp.delete(); count++;if( bPlayMovies ){playMovies( isplus );}}}if( bPlayMovies ){playMovies( false );}System.out.println();return count; } public static void playMovies(boolean isplus){if( isplus ){System.out.print(".");}else{for( int j = MAX_DOT_NUM; j > 0; j--){System.out.print("\b \b");}} }}
编译后,执行“java Delete 待删除的目录”。
较深的目录生成方法如下:
import java.io.File;import java.lang.Integer;/*** 生成指定深度的文件夹**/public class CreateFolders { public static void main(String[] args) {int depth = 3100;//控制创建文件夹的深度try{depth = Integer.valueOf(args[0]);}catch(Exception ex){}StringBuffer fileName = new StringBuffer();fileName.append("D:\\test");for(int i=1; i<= depth; i++){File file = new File(fileName.toString());if( !file.exists() ){file.mkdirs();}fileName.append("\\").append("hello");//System.out.print("\b\b\b"+(int)((i*1.0/depth)*100)+"%");System.out.printf("\b\b\b\b\b\b%2.0f%%",i*1.0/depth*100);}System.out.print("\b\b\b\b\b\b100% \r\n");System.out.println("指定驱动器/目录下生成的文件夹深度为:" + depth); }}
阅读全文
0 0
- Windows操作系统中“源路径太长”问题的解决办法
- windows 文件名太长无法删除的解决办法
- windows文件名太长无法删除的解决办法
- 环境变量PATH太长问题的解决办法
- Windows中删除路径太长目录及文件
- Intellij idea中编辑器中光标太长的解决办法
- 关于ubuntu终端命令路径太长的问题
- linux终端路径名太长解决办法
- 【首发】LongPathTool 长路径文件删除工具,解决源路径太长,源文件名长度大于文件系统支持的长度问题
- myeclipse中碰到类名太长的问题
- 【解决方案】Android中Log太多太长打印不全的问题
- VC中关于路径中含有空格问题的解决办法
- 源路径名太长或文件名太长解决方法
- SQL查询太长的问题
- 文件夹下面文件夹太多或者路径太长删不掉解决办法!
- 文件名太长导致删除不了的解决办法
- 转个链接,碰到同样的问题。确实路径太长会出问题
- 操作系统(Linux/Windows)中解决的问题记录
- Ubuntu 免密码登陆设置
- Sixth week of machine learning on Coursera
- 结构体C 英文金曲大赛
- 欢迎使用CSDN-markdown编辑器
- 多线程:线程管理
- Windows操作系统中“源路径太长”问题的解决办法
- Java学习之路--那些年踩过的坑
- Android源码解析之进程间通信(IPC)机制Binder解构简析和学习计划
- code之前序遍历
- fir
- java script中的typeof
- swagger环境的搭建(swagger-editor|swagger-ui)
- NOIP集训Week 3总结
- 鲸鱼币挖矿教程