1. 程式人生 > >JAVA基礎之 流和檔案

JAVA基礎之 流和檔案

File類

該類可以獲取檔案資訊,也可以對檔案進行管理,File物件既可以表示檔案也可以表示目錄,利用它可以對檔案和目錄的屬性進行操作。

import java.io.*;
import java.util.*;
public class FileTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("請輸入檔名");
		Scanner scanner = new Scanner(System.in);
		String pathname = scanner.next();
		File file = new File(pathname);
		if(!file.exists()){
			try{
				file.createNewFile();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		System.out.println("檔案是否存在:"+file.exists());
		System.out.println("是檔案麼:"+file.isFile());
		System.out.println("是目錄麼:"+file.isDirectory());
		System.out.println("名稱:"+file.getName());
		System.out.println("路徑:"+file.getParent());
	}
}

根據流的方向可以分為輸入流和輸出流。使用者可以從輸入流中讀取資訊,可以從輸出流中寫入資料。

按照處理流的基本單位,可以分為:字元流和位元組流。

按照流的角色分:節點流和過濾流

 

InputStream和OutputStream是位元組輸入輸出的頂級父類。

Reader和Writer是字元流的頂級父類。

位元組流

InputStream主要用用於從資料來源按照位元組的方式讀取資料。

import java.io.*;

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.IO;
public class FileInputStreamDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileInputStream fi = null;
		try{
			fi = new FileInputStream("e:\\test.txt");
			int value=fi.read();
			System.out.println("檔案中的內容是:"+(char)value);
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(fi!=null){
				fi.close();
				}
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}

}

OutputStream主要用用於王檔案裡寫入資料。

import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileOutputStream fo =null;
		try{
			fo = new FileOutputStream("d:\\test.txt");
			for(int i=0;i<10;i++){
				fo.write(65);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(fo!=null){
					fo.close();
				}
			}catch(IOException e)
			{
				e.printStackTrace();
			}
		}
	}

}

過濾流分為過濾輸入流和過濾輸出流

FilterInputStream是過濾輸入流,其父類是InputSteam。

BufferedInputStream就是利用緩衝區來提高效率的。

import java.io.*;
public class BufferedInputStreamDEmo {
	public static void main(String[] args) {
		BufferedInputStream bi = null;
		try{
			bi = new BufferedInputStream(new FileInputStream("d:\\test.txt"));
			int result = 0;
			System.out.println("檔案中的內容為");
			while((result=bi.read())!=-1){
				System.out.print((char)result);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(bi!=null){
					bi.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
}

FilterOutputStream是過濾輸出流。

BufferedOutputStream例子

import java.io.*;
public class BufferedOutputStreamDemo {
	public static void main(String[] args) {
		BufferedOutputStream bo =null;
		try{
			bo = new BufferedOutputStream(new FileOutputStream("d:\\test.txt"));
			for (int i = 0; i < 10; i++) {
				bo.write(65);
			}
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			try{
				if(bo!=null){
					bo.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
}

字元流

利用FileReader和BufferedReader讀取檔案

import java.io.*;
public class ReaderDemo {
	public static void main(String[] args) {
		BufferedReader br = null;
		try{
			br = new BufferedReader(new FileReader("d:\\test.txt"));
			System.out.println("檔案的內容是:");
			String result = null;
			while((result=br.readLine())!=null){
				System.out.println(result);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(br!=null){
					br.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
}

利用FileWriter和BufferedWriter讀取檔案

import java.io.*;
public class WriteDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BufferedWriter bw = null;
		try{
			bw = new BufferedWriter(new FileWriter("d:\\test.txt"));
			for(int i=0;i<10;i++){
				bw.write(65);
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try{
				if(bw!=null){
					bw.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

}