java批量读取并修改文件名称。

java批量读取并修改文件名称。,第1张

写好的,你自己看着作一点修改就行

import java.io.*

import java.sql.*

public class RenameFile

{

File parentFile

public RenameFile(File parentFile)

{

this.parentFile = parentFile

readDataBase(parentFile.list())

}

private void readDataBase(String[] list)//这个函数里读数据库的方式可能跟你的不一样,自己看着改改

{

for(String oldName:list)

{

try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

Connection conn = DriverManager.getConnection("jdbc:odbc:DSN","","")//DSN是数据源名字

Statement st = conn.createStatement()

ResultSet rs = st.executeQuery("Select * from TABLENAME where FILENAME = "+oldName)//TABLENAME是数据库里表的名字,FILENAME是表示文件名的字段的名字

while (rs.next())

{

String newName = rs.getString("NUMBER")//NUMBER是表示学号的字段,getString要根据你定义的数据类型作改动为getInt或其他

rename(oldName,newName)

}

}

catch (Exception e)

{

e.printStackTrace()

}

}

}

private void rename(String oldName, String newName)

{

try

{

File source = new File(parentFile.toString()+"\\"+oldName)

File target = new File(source.getParent()+"\\"+newName)

boolean res = source.renameTo(target)

}

catch (Exception e)

{

e.printStackTrace()

}

}

public static void main(String [] args)

{

String path = "path"//这里把path改成文件夹的路径

File file = new File(path)

new RenameFile(file)

}

}

_______________________________

for(String oldName:list)

这个是java 5.0以后才出现的新语法,也是一种循环,这个循环的次数是list的元素个数,用oldName作为临时变量,指代list中的每一个元素。

当然你也可以这样写:

for(int i=0, i<list.length(), i++)

public class FileNameTest {

/**

* 修改文件名

* @param file

*/

public static void changeFileName(File file){

File[] files = file.listFiles()//遍历文件夹下的所有文件

//因为你这文件夹下全是文件,所以这里没用递归

for (int i = 0i <files.lengthi++) {

File f = files[i]//获取文件

String fileName = f.getName()//获取文件名称

fileName = fileName.replace("韩顺平.循序渐进学.java.从入门到精通.", "")//你这里文件名有规律,所以我这里直接用replace方法来替换原来的文件名

f.renameTo(new File("D:\\Program Files\\视频\\"+fileName))//这里就是修改后的新文件名

}

}

/**

* main函数

* @param args

*/

public static void main(String[] args){

File file = new File("D:\\Program Files\\视频")

changeFileName(file)

}

}

如果只有一百个,手动也不是不行,细心就成

如果会写一点程序也可以 *** 作,比如把100个人的身份z号放到一个数组中,然后用一个循环分别对原为1到100的文件重命名为数组中的值

随手写一个10个人的例子(一百一千也同理)

Excel存储的身份z号

重命名前

重命名后

附程序(以Java为例,写的不严谨但可用,大佬轻喷)

开发环境: JDK8  需要依赖POI

import org.apache.poi.xssf.usermodel.XSSFRow

import org.apache.poi.xssf.usermodel.XSSFSheet

import org.apache.poi.xssf.usermodel.XSSFWorkbook

import java.io.*

public class BatchRename {

public static void main(String[] args) throws IOException {

String rootDir = "E:"+ File.separator +"Work"//文档所在的文件夹,比如E:\\Work

String[] idNumArr = new String[10]

File file = null//存储旧的文件对象

File fileNew = null//存储新的文件对象

File excelFile = new File("E:"+ File.separator +"杂货屋"+File.separator+"身份z号.xlsx")//Excel文件对象

//读取Excel中的身份z号

FileInputStream fis = new FileInputStream(excelFile)

XSSFWorkbook wb = new XSSFWorkbook(fis)

for(int numSheet = 0numSheet<wb.getNumberOfSheets()numSheet++){

XSSFSheet xssfSheet = wb.getSheetAt(numSheet)

//遍历所有表

if(xssfSheet==null){

continue

}

//遍历所有行

for (int numRow = 0numRow <= xssfSheet.getLastRowNum()numRow++) {

XSSFRow xssfRow = xssfSheet.getRow(numRow)

if(xssfRow!=null){//根据需求处理具体的列

idNumArr[numRow] = xssfRow.getCell(0).getStringCellValue()

}

}

}

for (int i = 0i <10i++) {

file = new File(rootDir+File.separator+String.valueOf(i+1)+".docx")

fileNew = new File(rootDir + File.separator + idNumArr[i]+".docx")

if(!file.renameTo(fileNew)){

System.out.println(rootDir+File.separator+String.valueOf(i+1)+"重命名失败")

}

}

}

}

Maven依赖如下:

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>3.16</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>3.16</version>

</dependency>

<dependency>

<groupId>net.sourceforge.jexcelapi</groupId>

<artifactId>jxl</artifactId>

<version>2.6.10</version>

</dependency>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11729441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存