首页 > 编程语言 >Java根据文本内容,批量修改文件名称

Java根据文本内容,批量修改文件名称

时间:2023-11-05 17:11:52浏览次数:35  
标签:file Java String temp len File 文件名称 new 文本

这两天学到IO流对文件的操作,想起在几年前有几百个按"1,2,3"排序命名的短文,于是产生将其批量命名后整理的想法.

这批文本的名称在文件内第十行的位置,前面的是广告和其他不相关的东西

本想构造抓到第九行广告语后返回下一行文本的方法,没能实现,只好用了更简单直接的直接抓第十行

 1 package mycharset;
 2 
 3 import javax.naming.Name;
 4 import java.io.*;
 5 import java.nio.charset.StandardCharsets;
 6 import java.util.Arrays;
 7 //批量修改文件名
 8 public class CharSetDemo3 {
 9     //.getBytes("GBK"), "UTF-8"
10     public static void main(String[] args) throws IOException {
11         //输入要修改的路径
12         File file = new File("Z:\\AAAA\\TEST");
13         //System.out.println(file.renameTo(newfile));
14         //System.out.println(file.getAbsoluteFile());
15         Rename(file);
16     }
17 
18     //遍历文件夹 修改文件名
19     public static void Rename(File path) throws IOException {
20         File[] files = path.listFiles();
21         for (File file : files) {
22             if(file!=null){
23                 if(file.isFile()){
24                     String name = GetName(file.getAbsolutePath());
25                     File newfile = new File("Z:\\AAAA\\TEST\\"+name);
26                     file.renameTo(newfile);
27                     System.out.println("修改名称为:"+newfile);
28                 }
29             }
30         }
31     }
32 
33     //传入路径的字符串,输出名字字符串
34     public static String GetName(String path) throws IOException {
35         FileReader fr = new FileReader(path);
36         int flag = 0;
37         int len = fr.read();
38         String temp = "";
39         a:
40         while (true) {
41             temp = "";
42             while (len != 10) {
43                 temp += String.valueOf((char) len);
44                 len = fr.read();
45             }
46             //获取名称的规则  得到第十行数据
47             len = fr.read();
48             if (flag++ > 9) {
49                 //System.out.println(temp);
50                 break a;
51             }
52         }
53         //将最后一位回车byte删除后return
54         fr.close();
55         int len1 = temp.getBytes().length - 1;
56         byte[] bytes = temp.getBytes();
57         byte[] bytes1 = new byte[len1];
58         System.arraycopy(bytes, 0, bytes1, 0, len1);
59         String name = new String(bytes1);
60         return name + ".txt";
61     }
62 }
View Code

经过一上午的测试和修改,确实能达成目标,虽然局限性和方法都很差劲,但好歹能跑

其中遇到了两个问题

一是通过GetName方法获取的字符串名称无法在其后添加任何字符,比如抓到了"惊悚乐园",想要在其后加上".txt"变为完整名称,却在拼接后只显示".txt"

第一反应是前面的基础知识不牢靠,String方法用错了,但之后不管用Stringbuffer还是Stringbuild操作都无法成功,测试用创建的其他字符串却没有这种错误

那么只可能是GetName获得的字符串出现了问题,先想到的是编码问题,统一将编码和解码格式全改为UTF-8,还是失败

陷入无措后索性用byte数组提出来看一下抓的到底是什么格式的什么东西,结果在最后看到个"13",合着全被换行符整蛊了

又加了个很低效的代码去将最后换行符去掉,再次运行后,成功

第二个问题是输出后的名称为乱码,原本的文本都是ANSI编码的,感觉应该还是编码和转码的问题,应该再写个批量转换文本编码的方法的

然而并不会写,哈哈

直接去网上下了个批量转码的工具,转成UTF-8后再次运行,成功

 

总体感觉就是在一个残疾人身上不断装劣等义体,最后确实跑起来也实现了目的,但丑陋到自己都不想去读第二遍

而且这才半天过去,再看已经看不懂了

sad

 

标签:file,Java,String,temp,len,File,文件名称,new,文本
From: https://www.cnblogs.com/ccmd3/p/17810739.html

相关文章

  • 前端学习-JavaScrip学习-js基础02
    学习教程:黑马程序员视频链接运算符自增运算符leti=1;console.log(i+++1);//输出2,i=2leti=1;console.log(++i+1);//输出3,i=2比较运算符开发中,判断相等,推荐用===比较小数会有精度问题逻辑运算符优先级:非>与>或练习01<!DOCTYPEhtml><htmllang="en"><he......
  • java进程后台运行
    实现Java进程后台运行的步骤流程图如下所示:创建Java程序编译Java程序将class文件打成jar包编写运行脚本后台运行脚本步骤一:创建Java程序首先,你需要创建一个Java程序,可以使用任何你熟悉的Java开发工具。假设你的Java程序是一个简单的HelloWorld程序,如下所示:publicclassHelloWorld......
  • java后置运行bat
    后置@echooffcdD:\server\gp12\alarmJavad:start/Bjavaw-jar-Xms128m-Xmx1024mpigx-gp12-biz.jar前置cdD:\server\gp12\alarmJavajava-jar-Xms128m-Xmx1024mpigx-gp12-biz.jar......
  • 论Java目前的发展道路
    Java自推出以来就一直是一种非常流行的编程语言,它被广泛应用于企业级应用、网站、移动应用等各个方面。以下是关于Java发展的一些相关信息:在技术领域,Java仍然是一个热门话题,因为它拥有大量的开源项目,并且有着稳定的社区支持。它的最新版本提供了许多新功能和改进,使它变得更加高效和......
  • java集合
    一、前言二、集合简介1.定义:2.集合与数组的区别:3.集合的好处:三、集合框架1.单列集合2.双列集合Δ体系图(重要)四、List集合详解(三万余字)五、Set集合详解(三万余字)六、增强for和迭代器万字详解七、Map集合详解(三万余字)八、Collections类详解九、泛型......
  • 命令行文本计数统计程序
    这个作业属于哪个课程https://edu.cnblogs.com/campus/zjlg/23rjjsjc这个作业的目标写一个命令行文本计数统计程序,统计字符、句子等的个数,同时学会单元测试和性能测试姓名-学号施晨安-2021330301021Gitee地址:https://gitee.com/dawn-calm/Software-Fundamentals......
  • JavaScript内存管理——隐藏类
    根据JavaScript所在的运行环境,有时候需要根据JavaScript引擎采取不同的性能优化策略。如果代码非常注重性能,那么隐藏类对我们是非常重要的。比如以下的代码:functionUser(){this.name="UserName";}letuser1=newUser();leruser2=newUser();在上面的代码中......
  • 每天5道Java面试题(第三天)
    1. final在Java中有什么作用?final修饰的类不能被继承。final修饰的方法不能被重写。final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。2. Java中的Math.round(-1.5)等于多少?等于-1: Math.round四舍五入大于0.5向上取整的(返回最接近它的整数,若有两个......
  • java——kafka随笔——broker&主题-topic&分区-partition理解
                  首先,让我们来看一下基础的消息(Message)相关术语:名称解释Broker消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个或者多个Broker可以组成⼀个Kafka集群TopicKafka根据topic对消息进⾏归类,发布到Kafka集群的每条消息都......
  • Java试题
    自增变量: packagecom.lvym;publicclassTest{publicstaticvoidmain(String[]args){inti=1;i=i++;//先算等号右边:把i压入栈,i=1,i自增,局部变量i=2,再算等号左边:把栈值1赋给i,i=1.intj=i++;//先算等号右边:把i压入栈,i=1,i自增,局部变量i......