需求: 数据库里保存的文件路径中包含的文件名字可能和svn上文件名存在大小写不统一的情况,windows下是没有问题的,但系统现在要迁到Linux下,文件太多,不可能手动一个一个来修改,所以本人写了一个类,实现了可以查询需要修改的文件,可以按提示自己选择是否要修改,实现了修改前自动备份文件到指定的目录.还列出了修改前和修改后文件名的对比,修改了哪些文件名,一目了然.需要的连接数据库jar包请看附件(jtds-1.2.2.jar)
package com.jobcn;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ReadFileUpdate {
private static Connection connection = null;
private static Statement statement = null;
private static ResultSet rs =null;
/**
* @param args
*/
public static void main(String[] args) {
ReadFileUpdate.CompareToData("D:\\FTP\\", "tableName","filedName","E:\\");
}
/*
* ftpName:文件路径 tableName:表名 fieldName:字段名
* tragetPath: 目标路径(为安全起见,要备份原文件夹,会自动创建这个文件夹并拷备里面的文件)
*/
public static void CompareToData(String ftpName, String tableName,String fieldName,String tragetPath) {
String dbConnectionString = "jdbc:jtds:sqlserver://172.16.88.229:1433/jobcn_boss_train";
String user = "***";
String password = "***";
String sql = "select " + fieldName + " from " + tableName + "";
connection = ReadFileUpdate.getConnection(dbConnectionString, user,password);
rs = ReadFileUpdate.getResultSet(sql);
// 读取文件名
File file = new File(ftpName);
File[] lf = file.listFiles();
List<String> dblist = new ArrayList<String>();// 数据库里读的
List<String> filelist = new ArrayList<String>();// 文件中读的
try {
for (int i = 0; i < lf.length; i++) {
filelist.add(lf[i].getName());
}
while (rs.next()) {
String AdderessName = rs.getString(fieldName);
// 截取名字
String fileExt = AdderessName.substring(AdderessName.lastIndexOf("/") + 1, AdderessName.length());
if ("".equals(fileExt) || fileExt == null || fileExt == "NULL") {
} else {
dblist.add(fileExt);
}
}
//关闭所有连接
ReadFileUpdate.closeConnection(connection,statement,rs);
// 移除相同的名字,以文件为主
filelist.removeAll(dblist);
//循环打印出不同的名字
for (String strs : filelist) {
System.out.println("需要修改名字的文件是:"+strs);//文件的名字
}
if(filelist.size()==0){
System.out.println("您不需要修改名字");//文件的名字
}else{
// 转变之前的名字
String beforeFileName = "";
String beforeDBName = "";
// HasMap,存放文件与数据库名一一对应的名字
//HashMap<String, String> hashMap = new HashMap<String, String>();
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.println("请输入(Y:修改,N:不修改),Y/N?");
String s = input.next();
if(s.equalsIgnoreCase("Y")){
//改名字前先备份原来的数据
File file1 = new File(ftpName);//原来的路径
File file2 = new File(tragetPath);//目标路径
ReadFileUpdate.copy(file1, file2);
for (int i = 0; i < filelist.size(); i++) {
beforeFileName = filelist.get(i);
for (int j = 0; j < dblist.size(); j++) {
beforeDBName = dblist.get(j);
//忽略大小写比较一次
if (filelist.get(i).equalsIgnoreCase(dblist.get(j))) {
//不忽略大小写比较一次,如果不相同,则说明需要修改名字
if (!beforeFileName.equals(beforeDBName)) {
//hashMap.put(beforeFileName, beforeDBName);
//修改名字
File file3 = new File(ftpName+beforeFileName);
//修改成从数据库里查出的名字
File file4 = new File(ftpName+beforeDBName);
if(file3.exists()){
if(file3.renameTo(file4)){
System.out.println("文件:"+beforeFileName+"修改名字成功!修改后的名字是:"+beforeDBName);
}
}
}
}
}
}
}else{
System.out.println("您没有选择修改以上文件的名字!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 获得连接
public static Connection getConnection(String dbConnectionString,
String user, String password) {
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
ReadFileUpdate.connection = DriverManager.getConnection(
dbConnectionString, user, password);
return ReadFileUpdate.connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// 取得数据集
public static ResultSet getResultSet(String sql) {
try {
statement = connection.createStatement();
return statement.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
System.err.println(sql);
return null;
}
}
//关闭连接
public static void closeConnection(Connection conn,Statement statement,ResultSet rs)
{
if (rs != null)
{
try{
rs.close();
rs = null;
}
catch(Exception e){
e.printStackTrace();
}
}
if (statement != null)
{
try{
statement.close();
statement = null;
}
catch(Exception e){
e.printStackTrace();
}
}
if (conn != null)
{
try{
conn.close();
conn = null;
}
catch(Exception e){
e.printStackTrace();
}
}
}
//拷贝一个目录或者文件到指定路径下
public static void copy(File source, File target) {
File tarpath = new File(target, source.getName());
if (source.isDirectory()) {
tarpath.mkdir();
File[] dir = source.listFiles();
for (int i = 0; i < dir.length; i++) {
//运用递归拷贝
copy(dir[i], tarpath);
}
System.out.println("原文件夹已成功备份到:"+target);
} else {
try {
InputStream is = new FileInputStream(source);
OutputStream os = new FileOutputStream(tarpath);
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
os.write(buf, 0, len);
}
is.close();
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
批量修改文件名工具有多种功能,可以极大地提高工作效率。通常,这些工具提供了以下核心特性: 1. **模板系统**:用户可以定义命名模板,如添加前缀、后缀,或者按照特定规则(如日期、序列号)进行替换。例如,将...
批量修改文件名是一个高效且实用的工具,能够帮助用户快速对一批文件进行命名规则的统一调整,极大地提高了工作效率。本篇将围绕"批量修改文件名_3.7"这个工具展开,详细阐述其主要功能和应用场景。 批量修改文件名...
批量修改文件名工具能够帮助用户高效地统一修改大量文件的名称,以满足特定的需求,例如更改扩展名、添加前缀或后缀、以及生成序列号等。以下是对这些概念的详细说明: 1. **更改文件名**:文件名是标识文件身份的...
这时,一个批量修改文件名的小工具就能大大提高工作效率。本文将深入讲解批量修改文件名的重要性和如何利用这样的工具进行操作。 批量修改文件名的概念是指一次性对多个文件进行命名规则的更改,而不是逐个手动操作...
为了解决这一难题,"批量改文件名工具"应运而生,成为了一个深受IT行业和广大用户青睐的软件。 这款工具的开发初衷是为了提供一个轻便、高效的方式来批量处理文件名称和扩展名。它无需安装即可直接运行,这使得它...
"批量修改文件名工具"就是为了解决这个问题而设计的实用程序。这类工具能够帮助用户高效地更改多个文件的名称,避免手动操作的繁琐和错误,提高工作效率。 批量修改文件名的工具有多种功能和应用场景。首先,它们...
"批量修改文件名_3.8.zip"这个压缩包提供了一个工具,专用于帮助用户批量对文件进行命名操作。下面我们将详细探讨批量修改文件名的相关知识点。 首先,批量删除文件中的字符是指可以一次性删除多个文件名中相同或...
"批量修改文件名的工具"就是为了解决这个问题而设计的。这类工具允许用户根据特定规则快速、有效地更改多个文件或文件夹的名称,极大地提高了工作效率。 批量重命名通常包含以下几个核心功能: 1. **规则设定**:...
"批量修改文件名小工具"就是专为解决这一问题而设计的实用软件。它允许用户一次性对多个文件进行重命名,极大地提高了工作效率。 批量修改文件名的方法通常包括以下几种: 1. **模板法**:用户可以设定一个模板,...
标题中的“一个批量修改文件名的小工具”指的是一个专门用于一次性更改多个文件名称的软件程序。这类工具在处理大量文件时非常有用,尤其当需要统一文件命名格式或进行整理时。批量修改文件名通常涉及一系列操作,如...
9. **Excel集成**:"批量修改文件名或文件夹名小工具.xls"可能意味着该工具结合了Excel的功能,允许用户通过表格来定义重命名规则,比如输入新的文件名模板,或者指定需要替换的文本和替换后的文本。 综上所述,...
批量修改文件名工具是一款专用于批量修改文件信息的工具。小伙伴们可以使用这款批量修改文件名同时修改多个文件的后缀名、批量修改文件名中指定的字符或是你可以指定删除某个位置的n个字符、批量替换文件名中的某些...
本压缩包提供的"批量修改文件名.rar"小工具正是为了解决这个问题。 批量修改文件名功能主要应用于以下场景: 1. **统一命名规范**:例如,当你下载了一大批图片、文档或其他类型的文件,它们可能来自不同的来源,...
幸运的是,随着科技的发展,市面上出现了很多优秀的文件名修改工具,如本文所介绍的“文件名修改工具.zip”,它能够在无需编程环境的情况下,帮助用户轻松批量修改文件名,极大地提高了文件管理的效率和准确性。...
在IT领域,对文件进行管理和组织是日常工作的重要部分,而批量修改文件名则是一个非常实用的需求,尤其是在处理大量文件时。本压缩包“批量修改文件名软件.zip”提供了一个便捷的解决方案,它包含一个名为“批量修改...
而这个“批量修改文件名脚本”很可能是一个批处理文件(.bat),它利用了Windows内置的命令行工具来实现文件名的批量更改。 批处理脚本的工作原理是通过一系列命令行指令,如REN(rename)命令,来实现文件的重命名...
ASP批量修改文件名程序是一个基于ASP(Active Server Pages)技术的实用工具,它允许用户通过Web界面批量更改服务器上文件的名称。这个程序的核心功能是处理文件系统对象(FileSystemObject,简称FSO),这是...