java手写-txt大文本分割
一、txt文本切割代碼
場景:公司項(xiàng)目txt日志文件太大,用notepad++看起來太卡了,公司禁用網(wǎng)盤也沒法下載,自己空閑了寫一個(gè)吧,復(fù)習(xí)一下輸入出入流。
先給代碼成品吧:
就是這么簡單,幾行代碼就可以了。
package happything;import javax.swing.*; import java.io.*;public class SlipTxt {// 源文件路徑 D:\28515.txtpublic static String filePath = "D:\\28515.txt";// 目標(biāo)文件目錄 D:\happythings\fileSplitpublic static String fileOutHeadPath = "D:\\happythings\\fileSplit" ;// 目標(biāo)文件名public static String fileOutName = "yx" ;// 目標(biāo)文件的大小 kbpublic static int cellSize = 1024;public SlipTxt() {}/*** 文件字符流分割文件 -- 不會(huì)亂碼* 文本操作最好用字符流* 影音視頻之類操作最好用字節(jié)流* @throws IOException*//*** 文件字符流分割文件* @throws IOException*/private static void splitByFileReader(String resFile, String targetFileDir, String targetFileName, int targetFileSize) throws IOException {// 讀取文件FileReader fileReader = new FileReader(resFile);FileWriter fileWriter = new FileWriter(targetFileDir + "/" + targetFileName + ".txt");// 一次讀1024個(gè)字符char [] buf = new char[1024];int count = 0;int id = 1;while (fileReader.read(buf) != -1) {// 讀取targetFileSize次之后,開始向第二個(gè)txt注入if (count != 0 && count % targetFileSize == 0) {// 創(chuàng)建新的輸出流時(shí),將前一個(gè)關(guān)閉。fileWriter.close();fileWriter = new FileWriter(targetFileDir + "/" + targetFileName + id + ".txt");id ++;}fileWriter.write(buf);count ++;}fileReader.close();fileWriter.close();} }后來想著復(fù)習(xí)一下java的gui控件,做一個(gè)簡單的可視化吧
代碼如下:
package happything;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class MyJframe extends JFrame {// 布局很簡單,直接看swing菜鳥教程就可以,五分鐘搞定public static void placeComponents(JPanel panel) {/* 布局部分我們這邊不多做介紹* 這邊設(shè)置布局為 null*/panel.setLayout(null);// 創(chuàng)建 JLabelJLabel resFileLabel = new JLabel("源文件目錄:");resFileLabel.setBounds(10,20,130,25);panel.add(resFileLabel);JTextField resFileText = new JTextField(20);resFileText.setBounds(160,20,200,25);panel.add(resFileText);// 目標(biāo)文件目錄JLabel targetFileDir = new JLabel("目標(biāo)文件目錄:");targetFileDir.setBounds(10,50,130,25);panel.add(targetFileDir);JTextField targetFileDirText = new JTextField(20);targetFileDirText.setBounds(160,50,200,25);panel.add(targetFileDirText);// 目標(biāo)文件名JLabel targetFileName = new JLabel("目標(biāo)文件名:");targetFileName.setBounds(10,80,130,25);panel.add(targetFileName);JTextField targetFileNameText = new JTextField(20);targetFileNameText.setBounds(160,80,200,25);panel.add(targetFileNameText);// 目標(biāo)文件大小JLabel targetFileSizeLabel = new JLabel("目標(biāo)文件大小(kb):");targetFileSizeLabel.setBounds(10,110,130,25);panel.add(targetFileSizeLabel);JTextField targetFileSizeText = new JTextField(20);targetFileSizeText.setBounds(160,110,200,25);panel.add(targetFileSizeText);// 開始分割JButton splitButton = new JButton("開始分割");splitButton.setBounds(10, 170, 100, 25);panel.add(splitButton);splitButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String resFile = resFileText.getText();String targetFileDir = targetFileDirText.getText();String targetFileName = targetFileNameText.getText();String targetFileSize = targetFileSizeText.getText();try {splitByFileReader(resFile, targetFileDir, targetFileName, Integer.valueOf(targetFileSize));} catch (IOException ex) {ex.printStackTrace();}}});}public static void main(String[] args) {// 創(chuàng)建 JFrame 實(shí)例JFrame frame = new JFrame("文件分割器");frame.setBounds(400, 180, 400, 240);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel = new JPanel();// 添加面板frame.add(panel);MyJframe.placeComponents(panel);// 設(shè)置界面可見frame.setVisible(true);}/*** 文件字符流分割文件* @throws IOException*/private static void splitByFileReader(String resFile, String targetFileDir, String targetFileName, int targetFileSize) throws IOException {// 讀取文件FileReader fileReader = new FileReader(resFile);FileWriter fileWriter = new FileWriter(targetFileDir + "/" + targetFileName + ".txt");// 一次讀1024個(gè)字符char [] buf = new char[1024];int count = 0;int id = 1;while (fileReader.read(buf) != -1) {// 讀取targetFileSize次之后,開始向第二個(gè)txt注入if (count != 0 && count % targetFileSize == 0) {fileWriter.close();fileWriter = new FileWriter(targetFileDir + "/" + targetFileName + id + ".txt");id ++;}fileWriter.write(buf);count ++;}fileReader.close();fileWriter.close();}}成品如圖:
notes:
漢字文本文件最好用字符流。一個(gè)字符在utf8下占3字節(jié),在控制目標(biāo)文本大小的時(shí)候,很容易出現(xiàn)一個(gè)漢字的三個(gè)字節(jié)在兩個(gè)分割后的txt文件中,造成亂碼。
在計(jì)算機(jī)最初的誕生階段,采用的編碼格式是ASCII編碼,這種編碼格式只制定了英文字母,數(shù)字以及一些標(biāo)點(diǎn)符號(hào)的編碼,但隨著計(jì)算機(jī)的發(fā)展,不同的語言體系,用ASCII編碼已經(jīng)不再能全部包含各種文字體系的文字。針對(duì)中文,最初提出了GB2312的編碼格式,這種編碼格式中,一個(gè)中文占用兩個(gè)字節(jié)長度。但各個(gè)語言體系使用不同的編碼格式,這樣就使計(jì)算機(jī)在各個(gè)語言體系間切換變得異常麻煩。由此,國際組織提出了UNICODE 編碼格式,這種編碼格式包含了大多數(shù)語言體系的文字,也被稱為萬國碼,在這個(gè)編碼格式中,一個(gè)中文占用四個(gè)字節(jié)長度。但這個(gè)編碼格式的中文,并不需要使用四個(gè)字節(jié)就能完成編碼,相當(dāng)于有一個(gè)字節(jié)被浪費(fèi)了,由此,進(jìn)一步提出了utf-8的中文編碼格式,該編碼格式中,一個(gè)中文占用三個(gè)字節(jié)長。
二、java程序轉(zhuǎn)exe可執(zhí)行文件
想著這個(gè)還是挺常用的,要是每次都要重新打開idea也太費(fèi)勁了,就轉(zhuǎn)成了exe文件。
大概過程:
1、打成jar包
2、下載exe4j工具,按需要操作,把jar包轉(zhuǎn)成exe文件
截圖教程太麻煩了,有空了補(bǔ)上
jar轉(zhuǎn)exe 詳細(xì)過程
https://www.jianshu.com/p/97601c111867
三、升級(jí)成不需要jre環(huán)境依賴也可以執(zhí)行的exe文件。
大概過程:
1、下載inno setup工具
2、將exe文件和jre依賴都注入進(jìn)去,就ok了。
截圖教程太麻煩了,有空了補(bǔ)上
總結(jié)
以上是生活随笔為你收集整理的java手写-txt大文本分割的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python替代php,Python架构
- 下一篇: java学习(91):System类