自己编写的一段文件分割代码:

分割文件的大小可以调用setMaxLength()方法来更改,以字节为单位。

静态成员Split.b是个开关,判断分割的小文件容量是否超过范围,超过则为false,重新建立一个新的文件继续读写。

输入输出流先定义FileRead,FileWiter,再包上BufferedReader,BufferedWriter。

每个循环都执行一次 s = br.readLine() 用来读取下一行

bw.newLine();  换行符,因为.readLine读取一行后无视换行符,不加这行代码会导致分割文件的排版混乱。

代码运行后,出现致命错误会导致程序关闭。

找了半天,错误在这里:

while(Split.b){
     x.write(s);
     s  = br.readLine();
}

当读到末尾,s == null时,因为判断循环的条件仍为true,所以又把空的s放进了x.write(s)

造成了 NullPointerException错误。

在循环中加上:if判断语句,问题解除。
     
  while(Split.b){
     x.write(s);
     s  = br.readLine();
     
     if(s == null){
      Split.b = false;
     }
    }

和群里的人聊天,看了这段代码,说我的代码缺乏面向对象的思想

就对程序做了修改,分成了4个类

FileCutterMain类: 主类, 基本上就是程序的对外接口-.-

FileCut类:“按行读取目标文件,并把读取的字符串传到Split类,如果分割文件容量已满,新建一个分割文件并继续输入”

CutName类:命名类,完成“对分割出的每个小文件命名”的功能

Split类: 完成“将按行读取的字符串写入分割文件,并判断分割文件容量是否达到上限”的功能

PS: 刚学了线程,想改成多线程运行,失败。。。老是出现重复读取

package FileCutter; public class FileCutterMain implements Runnable{ FileCut fc = new FileCut("E://龙枪//龙枪传承.txt"); public void run(){ fc.fileCut(); } public static void main(String[] args) { // TODO Auto-generated method stub Thread t1 = new Thread(new FileCutterMain()); t1.start(); } }

package FileCutter; import java.io.*; class FileCut{ private FileReader fr; private String copyLine; private String fileTrack; FileCut(String s){ this.fileTrack = s; } void fileCut(){ try{ fr = new FileReader(fileTrack); BufferedReader br = new BufferedReader(fr); copyLine = br.readLine(); CutName cn = new CutName(fileTrack); while(copyLine != null){ Split x = new Split(cn.cutName()); while(Split.b){ x.write(copyLine); copyLine = br.readLine(); if(copyLine == null){ Split.b = false; } } Split.b = true; } br.close(); }catch(FileNotFoundException e){ System.out.println("File Not Found."); System.exit(-1); }catch(IOException e1){ System.exit(-1); } } }

package FileCutter; class CutName { private String mainFileName; private int i = 0; CutName(String s){ mainFileName = s; } String cutName(){ String s = mainFileName.substring(0,mainFileName.length()-4); i++; return s+i+".txt"; } }

package FileCutter; import java.io.*; public class Split { private long MaxLength = 99999; private File file; static boolean b = true; Split(String name){ file = new File(name); } void setMaxLength(long i){ MaxLength = i; } void write(String s) throws IOException{ if(file.length() + s.getBytes().length >= MaxLength){ b = false; }else{ try{ FileWriter fw = new FileWriter(file,true); BufferedWriter bw = new BufferedWriter(fw); bw.write(s); bw.newLine(); bw.flush(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } } }

自己写的txt分割器相关推荐

  1. 用C++写一个文件分割器

    在成功将 mac 由 10.10 升级到 10.12 后,我发现除了新增一个并不怎么好用的 Siri 外,原来支持 NTFS 硬盘的驱动居然也成功失效了.我那块 500 GB 的东芝硬盘,虽不至于成砖 ...

  2. VC 写 TXT 文件分割器 附代码

    TXT文件分割器主要将很大的TXT文档分割成预定大小的文档 主要通过cfile类来实现 这就是最后的效果. 选择路径主要通过cfiledlg类来实现 // TODO: Add your control ...

  3. java中字符串分割器_java简易文本分割器实现代码

    本文实例为大家分享了java文本分割器的具体代码,供大家参考,具体内容如下 import java.io.*; class cutintopieces{ public static void main ...

  4. 怎样写一个拼写检查器-贝叶斯-python

    怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU 原版:http://norvig.com/spell-correct.html 翻译:http://blog.youxu ...

  5. 章节分割器 v2.0 Beta0618 版

    下载:点击此处下载 章节分割器 v2.0 Beta0618 ===================================== 一个把文本小说按照自定义条件切割成章节的软件,没有多么复杂的设置 ...

  6. 【ZT】怎样写一个拼写检查器

    这篇真的写的很棒,用心领会吧! 怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快 ...

  7. 如何写一个拼写检查器—Peter Norvig 中文翻译:徐宥

    [转]如何写一个拼写检查器 本文原著:Peter Norvig  中文翻译:徐宥 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇 ...

  8. 怎样写一个拼写检查器

     怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU link:http://blog.youxu.info/spell-correct.html 上个星期, 我的两个 ...

  9. java日志切割工具_JavaSwing版本的日志文件分割器

    JavaSwing版本的日志文件分割器 功能: 分割比100M还大的日志为多个100M的左右的小日志 上效果图 使用方法 点击打开按钮 打开一个log文件,然后点击切割按钮 直接上代码 package ...

  10. java txt分割_Java分割txt文件

    Java分割txt文件,现在网络小说比较长,好多朋友想用手机或者mp3之类的工具阅读,但是文件太大不方便,于是乎,我就写了一个分割文件的小程序,时间仓促,从有想法到写出初稿大概用来半个小时.先贴上来, ...

最新文章

  1. 【赠书】pandas创始人手把手教你利用Python进行数据分析
  2. Centos6.5环境中安装vsftp服务
  3. Thinkphp中Auth认证
  4. 68)deque数组
  5. List实现类性能和特点分析
  6. NVDLA软件架构和源码解析 第一章—内核驱动
  7. HuggingFace学习1:tokenizer学习与将文本编码为固定长度(pytorch)
  8. Python 3.8 新功能大揭秘
  9. validate.js的使用
  10. 学习大数据需要哪些数学知识?
  11. zbbz cnk
  12. Mac OS中Git版本更新(亲测有效)
  13. Tasker实现的app界面实时翻译 - 界面翻译4.0
  14. BZOJ4735 你的生命已如风中残烛(组合数学)
  15. 十二道锋味——既是食,也是人
  16. 不会英语可以学计算机编程吗,不会英语的人应该怎么学编程
  17. 天气预报实时显示系统设计
  18. 【源码】均衡优化器Equilibrium Optimizer(EO)
  19. DeepMind 发布强化学习通用算法 DreamerV3,AI 成精自学捡钻石
  20. matlab 2ask解调程序,2ask调制解调系统matlab源程序.doc

热门文章

  1. python解析mht文件_[原创].mht文件图片解析工具
  2. NC7WZ14P6X绝对最大额定参数
  3. 移动网络通信技术【移动电话网络介绍】
  4. ( 方框打勾 java_Java 11手册:Java 11是否在所有正确的方框中打勾?
  5. 公主同盟第3关(GBA)(难) 奥兰多西部
  6. KK集团招股书失效,首次冲刺港交所上市失利,尚未实现盈利
  7. 深度学习安装笔记(二)显卡、显卡驱动、CUDA 的关系以及显卡驱动升级
  8. Ordinal Regression with Multiple Output CNN for Age Estimation-(系列一_年龄估计)
  9. NVIDIA安装程序失败(组件全部未安装)
  10. un3.0服务器文档,ZXUNUSPP系统概述.ppt