Java文件字節輸入流(FileInputSream)文件字節輸出流(OutputStream),字符輸入輸出流(FileReader/FileWriter)

FileInputSream:讀文件的過程

文件寫入的過程

1.創建一個File類對象

2.創建一個FileInputStream對象

3.調用FileInputStream的方法,實現file文件的讀取

4.關閉相應的流

	public void testFileInputStream3(){
		//將流讀出到byte數組中
		FileInputStream fis=null;
		File file=null;
		try {
			file =new File("bast.txt");
			fis=new FileInputStream(file);
			byte[] b=new byte[20]; //讀取到的數據要寫入的數組
			int len; //記錄每次讀入到數組中的字節長度
			while((len=fis.read(b))!=-1){
//				for(int i = 0;i<len;i++)
//					System.out.print(i +":"+ (char) b[i]);
				String str = new String(b,0,len);
				System.out.println(len);
				System.out.print(str);
			}	
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(fis!=null)
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}


FileOutputSream:寫文件的過程

1.創建一個File對象

2.創建一個FileOutputStream輸出流對象

3.將File對象作爲FileOutputStream的構造器參數

4.寫入文件:若輸出的文件不存在,則創建一個文件;每次寫入時,都覆蓋原先的文件

5.關閉輸出流

	public void testFileOutputStream(){
		//1.創建一個File對象
		File file=new File("hello.txt");
		//2.創建一個FileOutputStream輸出流對象
		FileOutputStream fos=null;
		try {
			//3.將File對象作爲FileOutputStream的構造器參數
			fos=new FileOutputStream(file);
			//4.寫入文件:若輸出的文件不存在,則創建一個文件;每次寫入時,都覆蓋原先的文件
			fos.write(new String("I love you , stillman!").getBytes());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				//5.關閉輸出流
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

對文件進行復制

	public void testFileInputOutput(){
		long start=System.currentTimeMillis();
		FileInputStream fis=null;
		FileOutputStream fos=null;		
		File f1=new File("hello.txt");
		File f2=new File("hello-tmp.txt");
//		File f1=new File("D:/技術視頻/Java/第10章:IO(day15-day16)/day15/流的分類結構圖.JPG");
//		File f2=new File("D:/技術視頻/Java/第10章:IO(day15-day16)/day15/流的分類結構圖-copy.JPG");
		try {
			fis=new FileInputStream(f1);
			fos=new FileOutputStream(f2);
			
			int len=0;
			byte[] bs=new byte[10];
			while((len=fis.read(bs))!=-1){
				fos.write(bs, 0, len); //錯誤寫法:fos.write(bs, 0, bs.len());或者fos.write(bs);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fis!=null)
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(fos!=null)
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		long end=System.currentTimeMillis();
		System.out.println("執行時間:" + (end-start));
	}

使用FileReader,FileWriter只能用於處理文本文件,因爲FileReader,FileWriter是以字符的形式去讀的,對於視頻文件、音頻文件、圖像文件,只能使用字節流。

使用FileReader

	@Test
	public void testFileReader(){
		FileReader fr=null;
		File file=null;
		
		file=new File("bast.txt");
		try {
			fr=new FileReader(file);
			int len=0;
			char[] c=new char[24];
			while((len=fr.read(c))!=-1){
				String str=new String(c,0,len);
				System.out.print(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
		if(fr!=null)
		try {
			fr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


複製文件

	@Test
	public void testFileCopy(){
		FileReader fr=null;
		FileWriter fo=null;
		File file=null;
		File file_cp=null;
		try {
			file=new File("bast.txt");
			file_cp=new File("bast_cp.txt");
			fr=new FileReader(file);
			fo=new FileWriter(file_cp);
			int len=0;
			char[] c=new char[24];
			while((len=fr.read(c))!=-1){
				fo.write(c,0,len);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		if(fr!=null)
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if(fo!=null)
			try {
				fo.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}


使用字節輸入流、字節輸出流將輸入的字節流解碼成字符流,讀入程序;將程序中的字符流編碼成字節流,輸出

	@Test
	public void testInputOutStreamReader(){
		long start=System.currentTimeMillis();
		BufferedWriter bw = null;
		BufferedReader br = null;
		try {
			File f1=new File("hello.txt");
			FileInputStream fis=new FileInputStream(f1);
			InputStreamReader isr=new InputStreamReader(fis,"GBK");
			br=new BufferedReader(isr);
			
			File f2=new File("hello-tmp2.txt");
			FileOutputStream fos=new FileOutputStream(f2);			
			OutputStreamWriter osw=new OutputStreamWriter(fos, "unicode");
			bw=new BufferedWriter(osw);
			String str;
			while((str=br.readLine())!=null){
				System.out.println(str);
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(br!=null)
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(bw!=null)
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		long end=System.currentTimeMillis();
		System.out.println("執行時間:" + (end-start));
	}

使用標準輸入輸出流測試BufferredReader

	@Test
	public void testSTDStream(){
		long start=System.currentTimeMillis();
		BufferedReader br = null;
		try {
			InputStream is=System.in;
			InputStreamReader isr=new InputStreamReader(is);
			br = new BufferedReader(isr);
			String str = null;
			while(true){
				System.out.println("請輸入:");
				str=br.readLine();
				if(str.equalsIgnoreCase("e") || str.equalsIgnoreCase("exit")){
					break;
				}
				String str1=str.toUpperCase();
				System.out.println(str1);
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}finally{
			try {
				if(br!=null)
					br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}
		long end=System.currentTimeMillis();
		System.out.println("執行時間:" + (end-start));
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章