文件管理 · 2024年3月14日

java文件流切片|java下文本文件读取并分割

Ⅰ java中,如何将一个文件截断,只保留前一部分

importjava.io.FileInputStream;importjava.io.FileOutputStream;publicclassDemo{publicstaticvoidmain(String[]args)throwsException{//比如这个文件有2k,每次截断1kbFileInputStreamfis=newFileInputStream("D:\CopyDemo.java");byte[]b=newbyte[1024];//1024就表示1kbintlen=0;intopar=0;while((len=fis.read(b))!=-1){//读取文件//将截断的碎片文件存储到硬盘中FileOutputStreamfos=newFileOutputStream("D:\"+(++opar)+".opar");fos.write(b,0,len);fos.close();}fis.close();}}

Ⅱ java中文件的读取实现,以及用到哪些类

ava.io包中包括许多类提供许多有关文件的各个方面操作。1 输入输出抽象基类InputStream/OutputStream ,实现文件内容操作的基本功能函数read()、 write()、close()、skip()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。在文件读写的编程过程中主要应该注意异常处理的技术。 2 FileInputStream/FileOutputStream: 用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象); 本地文件读写编程的基本过程为: ① 生成文件流对象(对文件读操作时应该为FileInputStream类,而文件写应该为FileOutputStream类); ② 调用FileInputStream或FileOutputStream类中的功能函数如read()、write(int b)等)读写文件内容; ③ 关闭文件(close())。 3 PipedInputStream/PipedOutputStream: 用于管道输入输出(将一个程序或一个线程的输出结果直接连接到另一个程序或一个线程的输入端口,实现两者数据直接传送。操作时需要连结); 4管道的连接: 方法之一是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(pInput); 方法之二是利用双方类中的任一个成员函数 connect()相连接 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(); pinput.connect(pOutput); 5 管道的输入与输出: 输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据);而输入管道对象调用read()成员函数可以读起数据(即从输出管道中获得数据)。这主要是借助系统所提供的缓冲机制来实现的。 6随机文件读写: RandomAccessFile类(它直接继承于Object类而非InputStream/OutputStream类),从而可以实现读写文件中任何位置中的数据(只需要改变文件的读写位置的指针)。 随机文件读写编程的基本过程为: ① 生成流对象并且指明读写类型; ② 移动读写位置; ③ 读写文件内容; ④ 关闭文件。

Ⅲ java下文本文件读取并分割

packagedemo;importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;publicclassDemoApp{publicstaticvoidmain(String[]args)throwsException{//指定的文件Filefile=newFile("E:\Workspaces\eclipse3.7\Demo\src\test.txt");//装载listList<String>list=newArrayList<String>();//读取文件FileInputStreamfis=newFileInputStream(file);BufferedReaderbr=newBufferedReader(newInputStreamReader(fis));StringBufferbuffer=newStringBuffer();Stringline;inti=0;while((line=br.readLine())!=null){System.out.println(line);if(i==0){buffer.append(line+"");}else{//判断截取点if(line.substring(0,1).equals(">")){list.add(buffer.toString());buffer=newStringBuffer();buffer.append(line+"");}else{buffer.append(line+"");}}i++;}if(line==null){list.add(buffer.toString());}//testSystem.out.println("————————–");for(intj=0;j<list.size();j++){System.out.println(j+":"+list.get(j));System.out.println("———————–");}}}

Ⅳ 如何用Java分割大txt文件

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; public class FileCutter { /** * *sourceFile:源文件的路径 *targetDirectory:保存文件的目录(例:'C:\\') *prefix:是分割后文件的前缀(例:'2015-09-09') *size:是分隔后单一文件的大小单位是2kb的倍数,size传10,分割后单一文件就是20K。传100,文件就是2M一个。 * **/ public static void cutToMoreFile(String sourceFile, String targetDirectory, String prefix, int size) { //加载源文件 File source = new File(sourceFile); InputStream in = null; OutputStream out = null; int len = 0; int fileIndex = 1; //设置一次加载的大小 byte[] buffer = new byte[2048]; try { //把源文件读到InputStream中 in = new FileInputStream(source); //循环 while(true) { //分割后的文件流 out = new FileOutputStream(targetDirectory + File.separator + prefix + fileIndex++ + ".txt"); for(int i = 0; i < size; i++) { //如果文件读取完就退回方法。 if((len = in.read(buffer)) != -1) { //写入分割后的文件 out.write(buffer, 0, len); }else { //执行finally内容后,退出方法 return; } } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { //关系流 in.close(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

Ⅳ 怎样使用java编程实现文件的剪切/移动

可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的内容的剪切和移动操作。举例:BufferedReader bre = null;OutputStreamWriter pw = null;//定义一个流try {String file = "D:/test/test.txt";bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{if(str.indexOf("排除")<0){//判断是否需要舍弃pw.write(str);//将要写入文件的内容,可以多次write}}bre.close();//关闭流pw.close();//关闭流解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

Ⅵ JAVA怎么实现按行数分割文件

import java.io.*;public class SegFile{ /** *根据需求,直接调用静态方法start来执行操作 *参数: * rows 为多少行一个文件 int 类型 * sourceFilePath 为源文件路径 String 类型 * targetDirectoryPath 为文件分割后存放的目标目录 String 类型 * —分割后的文件名为索引号(从0开始)加'_'加源文件名,例如源文件名为test.txt,则分割后文件名为0_test.txt,以此类推 */ public static void start(int rows,String sourceFilePath,String targetDirectoryPath){ File sourceFile = new File(sourceFilePath); File targetFile = new File(targetDirectoryPath); if(!sourceFile.exists()||rows<=0||sourceFile.isDirectory()){ System.out.println("源文件不存在或者输入了错误的行数"); return; } if(targetFile.exists()){ if(!targetFile.isDirectory()){ System.out.println("目标文件夹错误,不是一个文件夹"); return; } }else{ targetFile.mkdirs(); } try{ BufferedReader br = new BufferedReader(new FileReader(sourceFile)); BufferedWriter bw = null; String str = ""; String tempData = br.readLine(); int i=1,s=0; while(tempData!=null){ str += tempData+"\r\n"; if(i%rows==0){ bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName()))); bw.write(str); bw.close(); str = ""; s += 1; } i++; tempData = br.readLine(); } if((i-1)%rows!=0){ bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName()))); bw.write(str); bw.close(); br.close(); s += 1; } System.out.println("文件分割结束,共分割成了"+s+"个文件"); }catch(Exception e){} } //测试 public static void main(String args[]){ SegFile.start(11,"d:/test/test.txt","d:/test/test/"); } }/*把代码改了下,先前的代码在行数刚好分完的情况下会多分一个空白文件,现在不存在这个问题了*/

Ⅶ 裁剪大tif格式文件的问题(java语言实现)

用c++实现的,先做一个对话框,一个按钮void CTifSliceDlg::OnButton1(){ IFH ifh; // 文件头 WORD ec; // 目录入口个数 DE *de1, *de2; // 源和目的文件的目录入口 DWORD nextIFD; // 下一个IFD偏移 DWORD offset, width, height; // 图像数据偏移、宽度、高度 UpdateData(); long m_x1 = m_x – m_size / 2; long m_x2 = m_x + m_size / 2 – 1; long m_y1 = m_y – m_size / 2; long m_y2 = m_y + m_size / 2 – 1; FILE *fp1 = fopen("D:/zxz/imagery.tif", "rb"); // 打开源图 FILE *fp2 = fopen("D:/zxz/" + m_filename + ".tif", "wb"); // 打开目标图 fseek(fp1, 0, SEEK_SET); fread(&ifh, sizeof(ifh), 1, fp1); // 读IFH if ((ifh.byteOrder == 0x4949) && (ifh.version == 0x2a)) // 判断字节顺序和版本是否有问题 { fseek(fp1, ifh.offsetToIFD, SEEK_SET); // 定位到IFD fread(&ec, 2, 1, fp1); // 读目录入口个数 de1 = new DE[ec]; de2 = new DE[ec]; fread(de1, sizeof(DE), ec, fp1); // 读所有目录入口 memcpy(de2, de1, sizeof(DE) * ec); // 复制为目标图的目录入口 fread(&nextIFD, 4, 1, fp1); // 读下一个IFD偏移 if (nextIFD == 0) // 为0表示没有下一个IFD { fwrite(&ifh, sizeof(ifh), 1, fp2); // IFH写入目标图 fwrite(&ec, 2, 1, fp2); // 目录入口个数写入目标图 for (int i = 0; i < ec; i++) { switch (de2[i].tag) { case 256: //宽度 de2[i].valueOffset = m_x2 – m_x1 + 1; // 修改目标图宽度 width = de1[i].valueOffset; // 取源图宽度 break; case 257: //高度 de2[i].valueOffset = m_y2 – m_y1 + 1; // 修改目标图高度度 height = de1[i].valueOffset; // 取源图高度 break; case 273: //图像数据偏移 offset = de2[i].valueOffset; // 取源图图像数据偏移 break; case 278: //图像数据行数 de2[i].valueOffset = m_y2 – m_y1 + 1; // 修改目标图图像数据行数 break; case 279: //图像数据字节数 de2[i].valueOffset = (m_x2 – m_x1 + 1) * (m_y2 – m_y1 + 1); // 修改目标图图像数据字节数 break; } } fwrite(de2, sizeof(DE), ec, fp2); // 将目录入口写入目标图 fwrite(&nextIFD, 4, 1, fp2); // 将下一个IFD偏移写入目标图 long curpos = ftell(fp1); char *buf = new char[offset – curpos]; fread(buf, offset – curpos, 1, fp1); // 读源图当前位置到图像数据之间的全部字节 fwrite(buf, offset – curpos, 1, fp2); // 写入目标图 delete[] buf; buf = new char[m_x2 – m_x1 + 1]; for (i = m_y1; i <= m_y2; i++) { fseek(fp1, offset + (i * width + m_x1), SEEK_SET); // 定位到图像第i行,m_x1处 fread(buf, m_x2 – m_x1 + 1, 1, fp1); // 读m_x1到m_x2之间的数据 fwrite(buf, m_x2 – m_x1 + 1, 1, fp2); // 写入目标图 } delete[] buf; } else { MessageBox("文件格式不正确!"); } delete[] de1; delete[] de2; } else { MessageBox("文件格式不正确!"); } fclose(fp1); fclose(fp2); MessageBox("切片成功!");}