importjava.io.FileInputStream;
importjava.io.FileOutputStream;
publicclassDemo{
publicstaticvoidmain(String[]args)throwsException{
//比如這個文件有2k,每次截斷1kb
FileInputStreamfis=newFileInputStream("D:\CopyDemo.java");
byte[]b=newbyte[1024];//1024就表示1kb
intlen=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");
//裝載list
List<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());
}
//test
System.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("切片成功!");
}