[工具类]文件或文件夹xx已存在,则重命名为xx(n)(2)

写在前面

最近一直在弄文件传输组件,其中一个功能就是,在接收端接收文件时,如果文件已经存在了,则对其进行文件名+索引的方式进行自动重命名,之前也写个类似的工具类,总感觉代码太冗余,每回头想想,总觉得心里有疙瘩,下班的时候在地铁上,又想了想,感觉是我把问题想复杂了,遂将今天的思路整理一下,写了一个辅助类,记录在此。

上篇文章

[工具类]文件或文件夹xx已存在,则重命名为xx(n)

ReNameHelper代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Text.RegularExpressions;
 7 using System.Threading.Tasks;
 8
 9 namespace Wolfy.ReNameHelper
10 {
11     /// <summary>
12     /// 文件已存在,重命名操作类
13     /// </summary>
14     public class ReNameHelper
15     {
16         /// <summary>
17         /// 对文件进行重命名
18         /// </summary>
19         /// <param name="strFilePath"></param>
20         /// <returns></returns>
21         public static string FileReName(string strFilePath)
22         {
23             //判断该文件是否存在,存在则返回新名字,否则返回原来的名
24             if (!File.Exists(strFilePath))
25             {
26                 return Path.GetFileName(strFilePath);
27             }
28             else
29             {
30                 //获取不带扩展名的文件名称
31                 string strFileNameWithoutExtension = Path.GetFileNameWithoutExtension(strFilePath);
32                 //获取扩展名
33                 string strFileExtension = Path.GetExtension(strFilePath);
34                 //获取目录名
35                 string strDirPath = Path.GetDirectoryName(strFilePath);
36                 //以文件名开头和结尾的正则
37                 string strRegex = "^" + strFileNameWithoutExtension + "(\\d+)?" ;
38                 Regex regex = new Regex(strRegex);
39                 //获取该路径下类似的文件名
40                 string[] strFilePaths = Directory.GetFiles(strDirPath, "*" + strFileExtension).Where(path => regex.IsMatch(Path.GetFileNameWithoutExtension(path))).ToArray();
41                 //获得新的文件名
42                 return strFileNameWithoutExtension + "(" + (strFilePaths.Length + 1).ToString() + ")" + strFileExtension;
43             }
44         }
45         /// <summary>
46         /// 文件夹已存在,重命名
47         /// </summary>
48         /// <param name="strFolderPath"></param>
49         /// <returns></returns>
50         public static string FolderReName(string strFolderPath)
51         {
52             //判断该文件夹是否存在,存在则返回新名字,否则返回原来的名
53             if (!Directory.Exists(strFolderPath))
54             {
55                 return Path.GetFileName(strFolderPath);
56             }
57             else
58             {
59                 //获取文件夹名
60                 string strFolderName= Path.GetFileName(strFolderPath);
61                 //获取目录名
62                 string strDirPath = Path.GetDirectoryName(strFolderPath);
63                 //以文件夹名开头和结尾的正则
64                 string strRegex = "^" + strFolderName + "(\\d+)?";
65                 Regex regex = new Regex(strRegex);
66                 //获取该路径下类似的文件夹名
67                 string[] strFilePaths = Directory.GetDirectories(strDirPath).Where(path => regex.IsMatch(Path.GetFileName(path))).ToArray();
68                 //获得新的文件名
69                 return strFolderName + "(" + (strFilePaths.Length + 1).ToString() + ")" ;
70             }
71         }
72     }
73 }

实现思路:使用正则进行匹配以文件名或者文件夹名字开头的文件或者文件夹名称,获取文件或者文件夹的个数,则新的文件名为文件名(文件或者文件夹总数+1)。当然,对一些,名字比较特殊的,不符合windows命名规则的,在客户端选择文件或者文件夹的时候,尽量对其进行过滤。以保证该辅助类起到应有的作用。

简单测试

在路径C:\Users\Wolfy\Desktop\MVC5下有如上图的一些文件,现在如果再次接收相同名字的文件或者文件夹,则返回新的文件或者文件夹名

结果

这里也分享一个园友写的一个重命名的辅助类。对文件操作的辅助类,记录再次,供大家参考。

原文地址:http://www.cnblogs.com/lxblog/archive/2012/11/13/2768096.html

using System;
using System.Runtime.InteropServices;
using System.IO;

namespace LxFile
{
    /// <summary>
    /// 文件操作代理,该类提供类似于Windows的文件操作体验
    /// </summary>
    public class FileOperateProxy
    {
        #region 【内部类型定义】
        private struct SHFILEOPSTRUCT
        {
            public IntPtr hwnd;         //父窗口句柄
            public wFunc wFunc;         //要执行的动作
            public string pFrom;        //源文件路径,可以是多个文件,以结尾符号"\0"结束
            public string pTo;          //目标路径,可以是路径或文件名
            public FILEOP_FLAGS fFlags;             //标志,附加选项
            public bool fAnyOperationsAborted;      //是否可被中断
            public IntPtr hNameMappings;            //文件映射名字,可在其它 Shell 函数中使用
            public string lpszProgressTitle;        // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。
        }

        private enum wFunc
        {
            FO_MOVE = 0x0001,   //移动文件
            FO_COPY = 0x0002,   //复制文件
            FO_DELETE = 0x0003, //删除文件,只是用pFrom
            FO_RENAME = 0x0004  //文件重命名
        }

        private enum FILEOP_FLAGS
        {
            FOF_MULTIDESTFILES = 0x0001,    //pTo 指定了多个目标文件,而不是单个目录
            FOF_CONFIRMMOUSE = 0x0002,
            FOF_SILENT = 0x0044,            // 不显示一个进度对话框
            FOF_RENAMEONCOLLISION = 0x0008, // 碰到有抵触的名字时,自动分配前缀
            FOF_NOCONFIRMATION = 0x10,      // 不对用户显示提示
            FOF_WANTMAPPINGHANDLE = 0x0020, // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放
            FOF_ALLOWUNDO = 0x40,           // 允许撤销
            FOF_FILESONLY = 0x0080,         // 使用 *.* 时, 只对文件操作
            FOF_SIMPLEPROGRESS = 0x0100,    // 简单进度条,意味者不显示文件名。
            FOF_NOCONFIRMMKDIR = 0x0200,    // 建新目录时不需要用户确定
            FOF_NOERRORUI = 0x0400,         // 不显示出错用户界面
            FOF_NOCOPYSECURITYATTRIBS = 0x0800,     // 不复制 NT 文件的安全属性
            FOF_NORECURSION = 0x1000        // 不递归目录
        }
        #endregion 【内部类型定义】

        #region 【DllImport】

        [DllImport("shell32.dll")]
        private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);

        #endregion 【DllImport】

        #region 【删除文件操作】
        /// <summary>
        /// 删除单个文件。
        /// </summary>
        /// <param name="fileName">删除的文件名</param>
        /// <param name="toRecycle">指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>操作执行结果标识,删除文件成功返回0,否则,返回错误代码</returns>
        public static int DeleteFile(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)
        {
            try
            {
                string fName = GetFullName(fileName);
                return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }

        /// <summary>
        /// 删除一组文件。
        /// </summary>
        /// <param name="fileNames">字符串数组,表示一组文件名</param>
        /// <param name="toRecycle">指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>操作执行结果标识,删除文件成功返回0,否则,返回错误代码</returns>
        public static int DeleteFiles(string[] fileNames, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)
        {
            try
            {
                string fName = "";
                foreach (string str in fileNames)
                {
                    fName += GetFullName(str) + "\0";     //组件文件组字符串
                }

                return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }
        #endregion 【删除文件操作】

        #region 【移动文件操作】
        /// <summary>
        /// 移动一个文件到指定路径下
        /// </summary>
        /// <param name="sourceFileName">要移动的文件名</param>
        /// <param name="destinationPath">移动到的目的路径</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框</param>
        /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码</returns>
        public static int MoveFile(string sourceFileName, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)
        {
            try
            {
                string sfName = GetFullName(sourceFileName);
                string dfName = GetFullName(destinationPath);

                return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }

        /// <summary>
        /// 移动一组文件到指定的路径下
        /// </summary>
        /// <param name="sourceFileNames">要移动的文件名数组</param>
        /// <param name="destinationPath">移动到的目的路径</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框</param>
        /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常</returns>
        public static int MoveFiles(string[] sourceFileNames, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)
        {
            try
            {
                string sfName = "";
                foreach (string str in sourceFileNames)
                {
                    sfName += GetFullName(str) + "\0";   //组件文件组字符串
                }
                string dfName = GetFullName(destinationPath);

                return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }
        #endregion 【移动文件操作】

        #region 【复制文件操作】
        /// <summary>
        /// 复制一个文件到指定的文件名或路径
        /// </summary>
        /// <param name="sourceFileName">要复制的文件名</param>
        /// <param name="destinationFileName">复制到的目的文件名或路径</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框</param>
        /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常</returns>
        public static int CopyFile(string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)
        {
            try
            {
                string sfName = GetFullName(sourceFileName);
                string dfName = GetFullName(destinationFileName);

                return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }

        /// <summary>
        /// 复制一组文件到指定的路径
        /// </summary>
        /// <param name="sourceFileNames">要复制的文件名数组</param>
        /// <param name="destinationPath">复制到的目的路径</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框</param>
        /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常</returns>
        public static int CopyFiles(string[] sourceFileNames, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)
        {
            try
            {
                string sfName = "";
                foreach (string str in sourceFileNames)
                {
                    sfName += GetFullName(str) + "\0";     //组件文件组字符串
                }
                string dfName = GetFullName(destinationPath);

                return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }
        #endregion 【复制文件操作】

        #region 【重命名文件】
        /// <summary>
        /// 重命名一个文件为新名称,建议您使用更方便的Microsoft.VisualBasic.FileSystem.ReName();替换该方法
        /// </summary>
        /// <param name="sourceFileName">要复制的文件名</param>
        /// <param name="destinationFileName">复制到的目的文件名或路径</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常</returns>
        [Obsolete("建议使用 Microsoft.VisualBasic.FileSystem.ReName()方法")]
        public static int ReNameFile(string sourceFileName, string destinationFileName, bool showDialog, ref string errorMsg)
        {

            try
            {
                SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();
                lpFileOp.wFunc = wFunc.FO_RENAME;
                lpFileOp.pFrom = GetFullName(sourceFileName) + "\0\0";         //将文件名以结尾字符"\0\0"结束
                lpFileOp.pTo = GetFullName(destinationFileName) + "\0\0";

                lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;
                if (!showDialog)
                    lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;     //设定不显示提示对话框

                lpFileOp.fAnyOperationsAborted = true;

                int n = SHFileOperation(ref lpFileOp);
                if (n == 0)
                    return 0;

                string tmp = GetErrorString(n);

                errorMsg = string.Format("{0}({1})", tmp, sourceFileName);

                return n;
            }
            catch (Exception ex)
            {
                errorMsg = ex.Message;
                return -200;
            }
        }

        /// <summary>
        /// 利用Microsoft.VisualBasic.FileSystem.ReName()方法实现
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="newFileName"></param>
        public static void ReNameFile(string filePath, string newFileName)
        {
            try
            {
                string extensName = Path.GetExtension(filePath);
                string newName = newFileName + extensName;
                Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(filePath, newName);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion 【重命名文件】

        /// <summary>
        /// 删除单个或多个文件
        /// </summary>
        /// <param name="fileName">删除的文件名,如果是多个文件,文件名之间以字符串结尾符'\0'隔开</param>
        /// <param name="toRecycle">指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>操作执行结果标识,删除文件成功返回0,否则,返回错误代码</returns>
        private static int ToDelete(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)
        {
            SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();
            lpFileOp.wFunc = wFunc.FO_DELETE;
            lpFileOp.pFrom = fileName + "\0";       //将文件名以结尾字符"\0"结束

            lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;
            if (toRecycle)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_ALLOWUNDO;  //设定删除到回收站
            if (!showDialog)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;     //设定不显示提示对话框
            if (!showProgress)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT;     //设定不显示进度对话框

            lpFileOp.fAnyOperationsAborted = true;

            int n = SHFileOperation(ref lpFileOp);
            if (n == 0)
                return 0;

            string tmp = GetErrorString(n);

            //.av 文件正常删除了但也提示 402 错误,不知道为什么。屏蔽之。
            if ((fileName.ToLower().EndsWith(".av") && n.ToString("X") == "402"))
                return 0;

            errorMsg = string.Format("{0}({1})", tmp, fileName);

            return n;
        }

        /// <summary>
        /// 移动或复制一个或多个文件到指定路径下
        /// </summary>
        /// <param name="flag">操作类型,是移动操作还是复制操作</param>
        /// <param name="sourceFileName">要移动或复制的文件名,如果是多个文件,文件名之间以字符串结尾符'\0'隔开</param>
        /// <param name="destinationFileName">移动到的目的位置</param>
        /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param>
        /// <param name="showProgress">指示是否显示进度对话框</param>
        /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param>
        /// <param name="errorMsg">反馈错误消息的字符串</param>
        /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码</returns>
        private static int ToMoveOrCopy(wFunc flag, string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)
        {
            SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();
            lpFileOp.wFunc = flag;
            lpFileOp.pFrom = sourceFileName + "\0";         //将文件名以结尾字符"\0\0"结束
            lpFileOp.pTo = destinationFileName + "\0\0";

            lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;
            lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMMKDIR; //指定在需要时可以直接创建路径
            if (!showDialog)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;     //设定不显示提示对话框
            if (!showProgress)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT;     //设定不显示进度对话框
            if (autoRename)
                lpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION;  //自动为重名文件添加名称后缀

            lpFileOp.fAnyOperationsAborted = true;

            int n = SHFileOperation(ref lpFileOp);
            if (n == 0)
                return 0;

            string tmp = GetErrorString(n);

            errorMsg = string.Format("{0}({1})", tmp, sourceFileName);

            return n;
        }

        /// <summary>
        /// 获取一个文件的全名
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <returns>返回生成文件的完整路径名</returns>
        private static string GetFullName(string fileName)
        {
            FileInfo fi = new FileInfo(fileName);
            return fi.FullName;
        }

        /// <summary>
        /// 解释错误代码
        /// </summary>
        /// <param name="n">代码号</param>
        /// <returns>返回关于错误代码的文字描述</returns>
        private static string GetErrorString(int n)
        {
            if (n == 0) return string.Empty;

            switch (n)
            {
                case 2:
                    return "系统找不到指定的文件。";
                case 7:
                    return "存储控制块被销毁。您是否选择的“取消”操作?";
                case 113:
                    return "文件已存在!";
                case 115:
                    return "重命名文件操作,原始文件和目标文件必须具有相同的路径名。不能使用相对路径。";
                case 117:
                    return "I/O控制错误";
                case 123:
                    return "指定了重复的文件名";
                case 116:
                    return "The source is a root directory, which cannot be moved or renamed.";
                case 118:
                    return "Security settings denied access to the source.";
                case 124:
                    return "The path in the source or destination or both was invalid.";
                case 65536:
                    return "An unspecified error occurred on the destination.";
                case 1026:
                    return "在试图移动或拷贝一个不存在的文件.";
                case 1223:
                    return "操作被取消!";
                default:
                    return "未识别的错误代码:" + n;
            }
        }
    }
}

 总结

 通过这个工具类的改写,发现实现一个功能,有很多方法,有时候换个思路,代码也许会更简洁,逻辑更清晰。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4229945.html
时间: 2024-12-29 22:48:00

[工具类]文件或文件夹xx已存在,则重命名为xx(n)(2)的相关文章

[工具类]文件或文件夹xx已存在,则重命名为xx(n)

写在前面 最近在弄一个文件传输的一个东东,在接收文件的时候,如果文件已经存在,该如何处理?提示?删除?感觉直接删除实在不太合适,万一这个文件对用户来说很重要,你给他删除了肯定不行.然后就想到了,windows系统在新建文件的时候,如果文件存在就以(n)这样的形式创建.当时觉得这种方式确实不错,查找了windows的api,未果,然后就想如果让自己实现,该如何去实现? 工具类 1 using System; 2 using System.Collections.Generic; 3 using S

php实现网页缓存的工具类分享_php技巧

php程序在抵抗大流量访问的时候动态网站往往都是难以招架,所以要引入缓存机制,一般情况下有两种类型缓存 一.文件缓存 二.数据查询结果缓存,使用内存来实现高速缓存 本例主要使用文件缓存. 主要原理使用缓存函数来存储网页显示结果,如果在规定时间里再次调用则可以加载缓存文件. 工具类代码: // 文件缓存类 class Cache { /** * $dir : 缓存文件存放目录 * $lifetime : 缓存文件有效期,单位为秒 * $cacheid : 缓存文件路径,包含文件名 * $ext :

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

[正文] 首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(b

Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类

package cn.edu.hactcm.cfcms.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.JOptionPane; /**  * CFMS :Computer f

Java获取文件大小,文件夹内文件个数的工具类

package cn.edu.hactcm.cfcms.utils; import java.io.File;import java.io.FileInputStream;import java.text.DecimalFormat;/**  * CFMS    :Computer files management system   * version :1.0 2013-3-2 下午03:33:07 */public class FileInfoUtils {  /**  * 获得文件类型(文

win7纯净版系统winsxs文件夹垃圾已到达几十G如何清理

win7纯净版系统winsxs文件夹垃圾已到达几十G如何清理  方法一:使用命令 1.以管理员方式运行CMD 2.输入以下命令:dism /online /cleanup-image /spsuperseded 方法二:使用微软专用补丁 1.下载微软Win7专用清理补丁kb2852386,注意该补丁区分32位系统和64位系统; 2.运行该补丁,运行后改补丁窗口会自动消失,同时提示补丁已经安装; 3.点击开始,在搜索栏中输入cleanmgr,并点击这个程序,打开磁盘清理程序; 4.在磁盘清理程序中

java工具类之实现java获取文件行数_java

工具类代码,取得当前项目中所有java文件总行数,代码行数,注释行数,空白行数 复制代码 代码如下: import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.Reader;import

java创建文件出错-创建文件类,调用自己写的工具类,为什么String path后面的路径要自己手动建好才能运行出来

问题描述 创建文件类,调用自己写的工具类,为什么String path后面的路径要自己手动建好才能运行出来 求大神给个完整的答案,不要改动太大,本人新手 解决方案 创建文件之前要确保文件所在的路径是存在.你这个没有创建成功就是因为路径不存在导致的.加个判断吧. if(!f1.getParentFile().exists()){ f1.mdirs(); } 解决方案二: 本来就是这样,file只有创建文件的功能,没有根据路径先创建文件夹再创建文件的功能. 你可以用split分割路径,自己先逐层创建

Java 中按文件名称分类,按文件大小分类,按照文件类型分类,按照最后修改时间分类的工具类

在此博客中用到了文件操作的工具类,可以连接 Java中实现复制文件到文件,复制文件到文件夹,复制文件夹到文件,删除文件,删除文件夹,移动文件,移动文件夹的工具类 package cn.edu.hactcm.cfcms.utils; import java.io.File;import java.util.HashSet;import java.util.Set; import javax.swing.JOptionPane;/** * 文件分类中用到的所有工具类 * CFMS    :Compu