最近有人反应某云盘,无法上传视频,我也倍受困扰,后来发现MD5 验证不根据文件名识别,故编写一个JAVA 统一追加扩展名类。
package test.file;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import com.util.AbstractObject;
/**
* 1 指定一个文件,统一追加扩展名(如 .txt)
* 2 指定一个文件夹,把里面的文件统一追加扩展名(如 .txt)
* @author 古色古香
* @date 2014-7-7
*/
public class RenameFileName extends AbstractObject{
public static String file_path = "E:/TDDOWNLOAD"; //文件或文件夹路径
public static String extension_name = ".txt"; //扩展名
//统一输出文件路径
public static String output_FilePath = "C:/Documents and Settings/Administrator/桌面/2.txt";
public static void main(String[] args) {
List filePathList = new ArrayList();//文件名列表
//获取文件名列表
RenameFileName.getFileNameList(file_path, filePathList);
showList(filePathList);
//统一追加扩展名:true 追加,false 删除
List newFileList = RenameFileName.renameFileName(filePathList, extension_name, true);
//输出追加后文件名列表
RenameFileName.appendLineFile(output_FilePath, newFileList, false);
System.out.println("=======RenameFileName 执行完毕=========");
}
/**
* 递归取出一个文件的文件名,或者一个文件夹下的文件名列表
* @param filePath
* @param filePathNameList 文件路径+文件名
* @author 古色古香
* @date 2014-7-7
*/
public static void getFileNameList(String filePath, List filePathNameList) {
File f = new File(filePath);
//当前路径是文件,取得文件名,直接返回
if(!f.isDirectory()){
//组装文件名
filePathNameList.add(f.getPath());
return ;
}
// 当前路径是目录,取得File数组
File[] files = f.listFiles();
// 当前目录为空,直接返回
if(files ==null){
System.out.println("目录为空=============="+f.getPath());
return ;
}else{
System.out.println("目录非空=============="+f.getPath()+",子文件长度+"+files.length);
}
// 循环取出子文件名列表
for (int i = 0; i < files.length; i++) {
File sonFiles = files[i];//子文件对象
if(sonFiles.isHidden()){
System.out.println("隐藏文件===="+sonFiles.getPath() + "\\" +sonFiles.getName());
}else{
//System.out.println("显示文件===="+sonFiles.getPath() + "\\" +sonFiles.getName());
}
// 递归出子目录
if (sonFiles.isDirectory()) {
System.out.println("子目录路径:" + sonFiles.getPath()+",子目录是:" + sonFiles.getName());
// 递归调用,取该目录包含的子文件名
getFileNameList(sonFiles.getPath(), filePathNameList);
}
// 递归出子文件
else {
System.out.println("子文件名:" + sonFiles.getName());
//组装文件名
filePathNameList.add(sonFiles.getPath());
}
}
}
/**
* 统一追加扩展名
* @param filePathList 文件路径+文件名
* @param extensionName 追加扩展名
* @param append 通过这个对象来判断是否向文本文件中追加内容
*/
public static List renameFileName(List filePathList,String extensionName, boolean append){
List newFileList = new ArrayList();// 新文件路径列表
if(filePathList == null || filePathList.size()<=0){
System.out.println("统一追加扩展名, 源文件路径列表为空:" + filePathList);
return newFileList;
}
//循环追加扩展名
for(int i=0; i<filePathList.size(); i++){
String resFilePath = (String)filePathList.get(i);//源文件名
//文件名为空,则循环下一个
if(resFilePath == null || "".equals(resFilePath)){
continue;
}
String newFilePath = resFilePath; //新文件名, 默认不变
if(append){
if(!resFilePath.endsWith(extensionName)){
newFilePath = resFilePath + extensionName;//追加
}
}else{
if(resFilePath.endsWith(extensionName)){
newFilePath = resFilePath.substring(0, resFilePath.length()-extensionName.length());//去除
}
}
newFileList.add(newFilePath);
File resFile = new File(resFilePath);
File newFile = new File(newFilePath);
boolean appednFlg = resFile.renameTo(newFile);
if(appednFlg){
System.out.println("统一追加扩展名成功:新文件名" + newFilePath);
}else{
System.out.println("统一追加扩展名失败:源文件名" + resFilePath);
}
}
return newFileList;
}
/**
* 向文本文件中,逐行重新写入或追加内容
* @param filePathName 得到文本文件的路径+文件名
* @param fileContent 需要写入的内容
* @param append 通过这个对象来判断是否向文本文件中追加内容
*/
public static void appendLineFile(String filePathName, List contentList, boolean append) {
try {
File file = new File(filePathName);
if (file.exists() == false){ // 如果文本文件不存在则创建它
file.createNewFile();
file = new File(filePathName); // 重新实例化
}
//FileWriter是直接跟输出介质发生关系的 ,性能极差
FileWriter fileWriter = new FileWriter(file, append);
//BufferedWriter是输出的时候有一个缓冲区
BufferedWriter bufwriter = new BufferedWriter(fileWriter);
//PrintWriter提供println()方法可以写不同平台的换行符
PrintWriter printWriter = new PrintWriter(fileWriter);
for(int i=0;i<contentList.size();i++){
Object fileContent = contentList.get(i);
if(fileContent != null){
// 以下三种方式都可以写
// fileWriter.write(fileContent.toString() + "\n");
// bufwriter.newLine();
// bufwriter.write(fileContent.toString());
printWriter.println();
printWriter.write(fileContent.toString());
}else{
System.out.println("文件内容=========contentList["+i+"]"+fileContent);
}
}
printWriter.flush();
printWriter.close();
// bufwriter.flush();
// bufwriter.close();
fileWriter.flush();
fileWriter.close();
} catch (Exception d) {
System.out.println(d.getMessage());
}
}
}
相关推荐
在Windows系统中,".exe"扩展名表示可执行文件,这意味着用户可以直接运行这个程序来执行文件名的替换和追加操作。不过,需要注意的是,“rm”通常是删除文件的命令,但在这里可能是开发者为了某种目的而命名的。 ...
- A项:视图文件的扩展名通常是`.vcx`的说法不准确,视图文件并没有统一的扩展名标准,这取决于具体的数据库管理系统。 - B项:查询文件保存的是查询语句而非查询结果,因此此选项不正确。 - C项:查询设计器是一...
3. VFP表单文件扩展名:Visual FoxPro中,可执行的表单文件的扩展名为.SCX,这对应于描述中给出的正确答案B。 4. 二进制与十进制转换:十进制数45等值的二进制数是101101,这涉及数制转换的基础知识。 5. ...
12. 数据库文件扩展名:在某些数据库系统中,如Access,数据库文件的扩展名为 `.mdb`。 13. 索引排序:创建索引时,默认排序方式通常是升序。 14. 资源唯一标识:Web上的资源通常通过URL(统一资源定位符)进行...
### Java Applet源程序编译后的字节码文件扩展名 - **选项分析**: - A. java:Java源代码文件的扩展名。 - B. class:Java编译后生成的字节码文件的扩展名。 - C. html:网页文件的扩展名。 - D. exe:可执行...
8. 数据库文件扩展名:数据库文件的扩展名通常是`.DBF`,这是某些数据库系统的文件格式。 9. for循环:`for(i=0;i;i++)`循环结束后,变量i的值为1,因为循环体内部会将i自增1。 10. HTML表单:在HTML中,创建普通...
11. Windows98中的快捷方式通常以.lnk为扩展名。 12. C语言常量中,1.2e0.5是错误的,因为指数部分必须是整数。 13. 编写Java Applet时,响应事件处理通常需要导入`java.awt.event`包。 14. URL是Uniform ...
22. Java字节码文件:Java程序编译后的字节码文件扩展名为.class。 23. 微处理器字长:微处理器处理的数据字长与微处理器芯片型号有关。 24. Windows多用户桌面:Windows98支持多用户自定义桌面。 25. CPU集成:...
20. C++源文件扩展名:C++源代码文件的默认扩展名为`.cpp`。 21. 线性表:栈是“后进先出”(LIFO),队列是“先进先出”(FIFO)。有序线性表可以使用顺序或链式存储结构。 22. Java关键字:`false`是Java中的...
- Java程序经过编译后生成的字节码文件的扩展名为`.class`。 #### 26. 面向对象语言概念 - **知识点**: 面向对象编程语言的基本概念。 - **详细解释**: - 面向对象语言的基本概念包括消息传递、继承和多态性。 ...
根据提供的文档内容,我们可以总结出以下关键知识点: ### 1. 使用Tkinter模块创建图形用户界面应用程序的主要步骤 - **导入Tkinter模块**:在Python中使用Tkinter库...但通常情况下,VB窗体文件的扩展名是**.frm**。
* charsetName:字符集名 例如 : "GBK"、"UTF-8" 、"ISO-8859-1" * * 不常用 * 3.String(byte[] bytes) 根据默认字符集将字节数组转换为字符串 * 4.String(byte[] bytes, String ...
9. Access数据库的扩展名为.mdb。 10. 在数据库系统的三级模式结构中,一个数据库可以有多个外模式,而模式和内模式通常是唯一的。 11. 在VS2008中,打开工具箱需要使用"视图"菜单。 12. Internet上应用最广泛的...
本压缩包“LogUtils.zip”包含了一个名为“LogUtils.java”的文件,这是一个自定义的日志工具类,专门用于简化和优化Android的日志输出操作。以下是对这个工具类的详细解析: 1. **日志级别**: Android的日志系统...
7. Java源代码文件经过编译后会产生**字节码**文件,其扩展名为**.class**。字节码文件可以在任何支持Java虚拟机(JVM)的平台上运行,这体现了Java平台无关性的特点。 #### 工作表保护 8. Excel中的**工作表保护**...
24. Access数据库文件格式:Access的数据库文件以.mdb为扩展名。 25. ASP.NET页面处理:`Response.End()`方法会导致Web服务器停止处理当前请求,因此后面的`Response.Write("你好")`不会被执行。 26. 消除查询结果...
- **详细解析**: 编译Java源代码文件(.java)后生成的字节码文件的扩展名为“.class”。字节码文件是由Java虚拟机执行的中间代码,可以跨平台运行。 #### 9. Internet协议基础 - **知识点**: Internet上不同网络...
5. 在保存工程时,窗体文件和工程文件的文件名可以相同,这个说法是错误的,实际上它们通常有不同的文件扩展名以区分。 6. 在C语言中,从键盘输入数据到整型变量x、y、z的正确语句是使用`scanf()`函数,并通过取...