Java文件流


Java讀寫文件的IO流分兩大類,字節流和字符流,基類分別是

字符:Reader和Writer

字節:InputStream和OutPutStream


BufferedInputStream是帶緩衝區的輸入流,默認緩衝區大小是8M,能夠減少訪問磁盤的次數,提高文件讀取性能;

BufferedOutputStream是帶緩衝區的輸出流,能夠提高文件的寫入效率。


1.java的文件操作

1.1目錄或文件的創建

package com.文件流.s1;

import java.io.File;//java.io.File類用於表示文件(目錄)
import java.io.IOException;

/**
 * 文件操作:文件目錄創建,文件創建
 */
public class Demo1 {

    public static void main(String[] args) throws IOException {
        //文件對象 mac,linux中注意權限問題
        File file = new File("D://java創建的目錄");
        boolean b = file.mkdir(); // 創建虛擬目錄
        if (b) {
            System.out.println("目錄創建成功");
            //文件對象 mac,linux中注意權限問題
            file = new File("D://java創建的目錄//java創建的文件.txt");
            boolean b2 = file.createNewFile(); // 創建文件
            if (b2) {
                System.out.println("文件創建成功!");
            } else {
                System.out.println("文件創建失敗!");
            }
        } else {
            System.out.println("目錄創建失敗");
        }
    }
}

1.2文件或目錄刪除操作

package com.文件流.s1;

import java.io.File;
import java.io.IOException;

/**
 * 文件操作:文件刪除和文件目錄刪除
 */
public class Demo2 {

	public static void main(String[] args) throws IOException {
		File file=new File("D://java創建的目錄//java創建的文件.txt");
		if(file.exists()){ // 判斷文件是否存在
			boolean b=file.delete(); // 刪除文件
			if(b){
				System.out.println("文件刪除成功");
			}else{
				System.out.println("文件刪除失敗");
			}
			file=new File("D://java創建的目錄");
			if(file.exists()){
				boolean b2=file.delete(); // 刪除目錄
				if(b2){
					System.out.println("目錄刪除成功");
				}else{
					System.out.println("目錄刪除失敗");
				}
			}
		}
		
	}
}

1.3遍歷文件(查找文件)

package com.文件流.s1;

import java.io.File;
import java.io.IOException;

/**
 * 目錄的遍歷
 */
public class Demo3 {

    public static void main(String[] args) {
        String path = "D:\\";//要遍歷的路徑
        File file = new File(path);//獲取其file對象
        File[] fs = file.listFiles();//遍歷path下的文件和目錄,放在File數組中
        for (File f : fs) {  //遍歷File[]數組
            if (!f.isDirectory())//若非目錄(即文件),則打印
                System.out.println(f);
        }
    }
}

1.4文件的遍歷

package com.文件流.s1;

import java.io.File;
import java.io.IOException;

/**
 * 文件遞歸
 */
public class Demo4 {

	public static void listFile(File file){
		if(file!=null){
			if(file.isDirectory()){ // 是目錄情況
				System.out.println(file); // 打印目錄
				File files[]=file.listFiles(); // 遍歷目錄
				if(files!=null){
					for(int i=0;i<files.length;i++){
						listFile(files[i]); // 遞歸調用自身
					}
				}
			}else{ // 是文件情況
				System.out.println(file); // 是文件 直接打印文件的路徑
			}
		}
	}
	
	public static void main(String[] args) throws IOException {
		File file=new File("D://");
		listFile(file);
	}
}

2.字節流

2.1輸入流

第一種:

package com.文件流.s2;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * 字節流:輸入操作
 */
public class Demo01 {
	/**
	 * 字節
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\a.txt");//創建文件對象
		InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
		byte b[]=new byte[1024];//創建字節數組對象
		int len=inputStream.read(b);//讀取字節數組長度
		inputStream.close();//關閉字節流
		System.out.println("讀取的內容是:"+new String(b,0,len));
	}
}

第二種:

package com.文件流.s2;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
 * 字節流:輸入操作
 */
public class Demo2 {

	public static void main(String[] args) throws Exception {
		File file=new File("D:\\a.txt");//創建文件對象
		InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
		int fileLength=(int) file.length();//文件的長度
		byte b[]=new byte[fileLength];//創建字節文件對象
		inputStream.read(b);//獲取字節流長度
		inputStream.close();//關閉字節流
		System.out.println("讀取的內容是:"+new String(b));
	}
}

第三種:

package com.文件流.s2;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
 * 字節流:輸入操作
 */
public class Demo3 {

	public static void main(String[] args) throws Exception {
		File file=new File("D:\\a.txt");//創建文件對象
		InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
		int fileLength=(int) file.length();//獲取字節長度
		byte b[]=new byte[fileLength];//創建字節數組對象
		int len=0;
		int temp=0;//字節流的長度
		while((temp=inputStream.read())!=-1){//如果字節流的長度不等於-1
			b[len++]=(byte) temp;
		}
		inputStream.close();
		System.out.println("讀取的內容是:"+new String(b));
	}
}

2.2輸出流

第一種:

package com.文件流.s2;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 字節流:輸出操作
 */
public class Demo4 {

	public static void main(String[] args) throws Exception {
		File file=new File("D:\\a.txt");//創建文件對象
		OutputStream out=new FileOutputStream(file);//創建文件輸出流對象
		String str="你好,我好,大家好 ,愛生活,愛拉芳";//字符串
		byte b[]=str.getBytes();//字符串轉換爲字節數組
		out.write(b);//寫入
		out.close();//關閉
	}
}

第二種:

package com.文件流.s2;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 字節流:輸出操作
 */
public class Demo5 {

	public static void main(String[] args) throws Exception {
		File file=new File("D:\\a.txt");//創建文件對象
		OutputStream out=new FileOutputStream(file,true);//創建字符輸出對象
		String str="你好,我好,大家好 ,愛生活,愛拉芳322好啊";//字符串
		byte b[]=str.getBytes();//字符串轉換爲字節數組
		out.write(b);
		out.close();
	}
}

3.緩衝區

package com.文件流.s3;

import java.io.*;

/**
 * 緩衝方式
 */

public class Demo01 {

	/**
	 * 緩衝方式
	 * @throws Exception
	 */
	public static void bufferStream()throws Exception{
		BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("D:\\a.txt"));//創建緩衝區輸入流
		BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\複製a.txt"));//創建緩衝區輸出流
		int b=0;
		long startTime=System.currentTimeMillis();//獲取當前的時間
		while((b=bufferedInputStream.read())!=-1){//緩衝區字節流還有
			bufferedOutputStream.write(b);//寫入緩衝區
		}
		bufferedInputStream.close();//關閉緩衝區輸入流
		bufferedOutputStream.close();//關閉緩衝區輸出流
		long endTime=System.currentTimeMillis();//獲取當前的系統時間
		System.out.println("緩衝方式話費的時間:"+(endTime-startTime));
	}
	
	
	/**
	 * 非緩衝方式
	 * @throws Exception
	 */
	public static void stream()throws Exception{
		InputStream inputStream=new FileInputStream("D:\\a.txt");//創建輸入流
		OutputStream outputStream=new FileOutputStream("D:\\複製a.txt");//創建輸出流
		int b=0;
		long startTime=System.currentTimeMillis();//獲取當前系統時間
		while((b=inputStream.read())!=-1){//字節流的長度還有
			outputStream.write(b);//寫入
		}
		inputStream.close();//關閉輸入流
		outputStream.close();//關閉輸出流
		long endTime=System.currentTimeMillis();//獲取當前時間
		System.out.println("非緩衝方式話費的時間:"+(endTime-startTime));
	}
	
	public static void main(String[] args) throws Exception {
		stream();
//		bufferStream();
	}
}

4.字符流

4.1字符流讀

第一種

package com.文件流.s4;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

/**
 * 字符流:讀
 */
public class Demo01 {
	/**
	 * 字符
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		File file=new File("D://a.txt");//創建文件
		Reader reader=new FileReader(file);//創建讀字符對象
		char c[]=new char[1024];//創建字符對象
		int len=reader.read(c);//讀取文件字符長度
		reader.close();//關閉字符流對象
		System.out.println("讀取的內容是:"+new String(new String(c,0,len)));
	}
}

第二種

package com.文件流.s4;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

/**
 * 字符流:輸入流
 */
public class Demo2 {

	public static void main(String[] args) throws Exception {
		File file=new File("D://a.txt");//創建文件對象
		Reader reader=new FileReader(file);//創建字符流對對象
		char c[]=new char[1024];//創建字符流
		int len=0;
		int temp=0;
		while((temp=reader.read())!=-1){//文件還在讀
			c[len++]=(char) temp;
		}
		reader.close();
		System.out.println("讀取的內容是:"+new String(new String(c,0,len)));
	}
}

4.2字符流寫

第一種

package com.文件流.s4;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

/**
 * 字符流:輸出流
 */
public class Demo3 {

	public static void main(String[] args) throws Exception {
		File file=new File("D://測試文件.txt");//創建文件對象
		Writer out=new FileWriter(file);//創建字符流對象
		out.write("愛我中華");//寫入
		out.close();//關閉
	}
}

第二種

package com.文件流.s4;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class Demo4 {

	public static void main(String[] args) throws Exception {
		File file=new File("D://測試文件1.txt");//創建文件對象
		Writer out=new FileWriter(file,true);//創建字符寫入對象
		out.write("愛我中華");
		out.close();
	}
}

發佈了40 篇原創文章 · 獲贊 27 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章