JAVA 中的IO操作

1、使用字节流读写数据

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Lmt02 {

	public static void main(String[] args) {

		// 读数据
		try {
			
			FileInputStream fileInputStream = new FileInputStream("hello.txt");// 创建文件的字节输出流
			byte input[] = new byte[11];// 字节数组大小不超过文件大小
			fileInputStream.read(input);
			String InputString = new String(input, "GBK");
			System.out.println(InputString);
			
			fileInputStream.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 写数据
		try {
			
			FileOutputStream fileOutputStream = new FileOutputStream("write.txt");
			String outPutString = "Write String";
			byte outPutByte[] = outPutString.getBytes();
			fileOutputStream.write(outPutByte);
			
			fileOutputStream.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 文件拷贝
		try {
			
			FileInputStream fInputStream = new FileInputStream("copy.txt");
			FileOutputStream fOutputStream = new FileOutputStream("new copy.txt");
			byte copeByte[] = new byte[9];

			while (fInputStream.read(copeByte) != -1) {
				fOutputStream.write(copeByte);
			}

			fInputStream.close();
			fOutputStream.close();
			System.out.println("拷贝完成!");

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

2、使用带缓冲的字节流读写数据

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Lmt03 {

	public static void main(String[] args) {
		try {
			
			FileInputStream fileInputStream = new FileInputStream("Java IO简介.mp4");
			BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, 9*1024);//设置了9K大小的缓冲区
			FileOutputStream fileOutputStream = new FileOutputStream("Java IO简介 副本.mp4");
			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream, 9*1024);
			
			byte input[] = new byte[1024];//设置每次读取的字节大小
			
			int count = 0;
			long begin = System.currentTimeMillis();
			
			while (bufferedInputStream.read(input) != -1) {
				
				bufferedOutputStream.write(input);
				count++;
			}
			
			bufferedInputStream.close();
			fileInputStream.close();
			bufferedOutputStream.close();
			bufferedInputStream.close();
			
			System.out.println("用时:" + (System.currentTimeMillis() - begin) + "ms");
			System.out.println("读取了:" + count + "次");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

3、使用字符流读写数据

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Lmt01 {

	public static void main(String[] args) {

		// 字符流读取数据
		try {
			File file = new File("Text.txt");
			FileInputStream fileInputStream = new FileInputStream(file);
			InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK");// 将字节流转换成字符流
			char inputChar[] = new char[99];
			int l = 0;
			while ((l = inputStreamReader.read(inputChar)) != -1) {
				String inputString = new String(inputChar, 0, l);
				System.out.println(inputString);// 自动调用inputChar.toString();
			}
			/*
			 * int l = 0; while ((l = inputStreamReader.read(inputChar)) != -1){
			 *  System.out.println(new String(inputChar, 0, l));//防止输出文件末尾的冗余量
			 * }
			 */
			inputStreamReader.close();
			fileInputStream.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 使用字符流写数据,实现文件拷贝
		try {
			FileInputStream fileInputStream = new FileInputStream("Text.txt");
			InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK");
			FileOutputStream fileOutputStream = new FileOutputStream("Copy_Text.txt");
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
			char input[] = new char[99];
			int l = 0;

			while ((l = inputStreamReader.read(input)) != -1) {
				String inputString = new String(input, 0, l);
				outputStreamWriter.write(inputString);
			}
			/*
			 * while ((l = inputStreamReader.read(input)) != -1) {
			 * outputStreamWriter.write(input,0,l); }
			 */

			outputStreamWriter.close();
			fileOutputStream.close();
			inputStreamReader.close();
			fileInputStream.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

4、使用带有缓冲的字符流读写数据

//import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

public class Lmt02 {
	public static void main(String[] args){
		try {
			FileInputStream fileInputStream = new FileInputStream("Text.txt");
			InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK");
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			
			FileOutputStream fileOutputStream = new FileOutputStream("Copy_Text_Buffer.txt");
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
			//BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
			PrintWriter printWriter = new PrintWriter(outputStreamWriter);
			//自动flush:PrintWriter printWriter = new PrintWriter(outputStreamWriter,true);
			
			String inputString;
			while ( (inputString = bufferedReader.readLine()) !=null) {
				 //bufferedWriter.write(inputString);//不会自动写入换行符
				printWriter.println(inputString);
			}
			
			
			bufferedReader.close();
			//bufferWriter.flush();
			//bufferedWriter.close();
			printWriter.flush();//当数据未填满缓冲区,缓冲区的数据不会写入,通过flush可以全部写入
			printWriter.close();
			outputStreamWriter.close();
			fileOutputStream.close();
			inputStreamReader.close();
			fileInputStream.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

5、FileReader与FileWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class Lmt03 {

	public static void main(String[] args) {
		try {
			
			FileReader fileReader = new FileReader("hello.txt");//读取文件文本数据
			BufferedReader bufferedReader = new BufferedReader(fileReader);
			
			FileWriter fileWriter = new FileWriter("hello_File.txt");
			BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
		
			String Line;
			while ((Line = bufferedReader.readLine())!=null) {
				bufferedWriter.write(Line+"\n");
			}
			
			bufferedWriter.flush();//???
			bufferedWriter.close();
			fileWriter.close();
			bufferedReader.close();
			fileReader.close();
			
			System.out.println("finish");
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

6、RandomAccessFile随机文件读写

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

public class Lmt01 {

	public static void main(String[] args) throws IOException {
		File file = new File("People.txt");
		RandomAccessFile randomAccessFile1 = new RandomAccessFile(file, "rw");// 没有则创建
		String name;
		String ID;
		name = "zhangsan ";
		ID = "9876543210";
		randomAccessFile1.writeBytes(name);
		randomAccessFile1.writeBytes(ID);
		name = "lisi     ";
		ID = "0123456789";
		randomAccessFile1.writeBytes(name);
//		randomAccessFile1.writeBytes(ID);
		byte[] b = ID.getBytes();
		for (int i = 0; i < b.length; i++) {
			randomAccessFile1.writeByte(b[i]);
		}
		randomAccessFile1.close();// 写入操作完成。文件必须关闭。

		// 下面进行读取操作
		RandomAccessFile randomAccessFile2 = new RandomAccessFile(file, "r");// r表示模式为读

		// 读取第2个人的信息
		byte[] nameByte = new byte[9], IDByte = new byte[10];

		randomAccessFile2.skipBytes(1 * 19);// 跳过12个字节,即跳过第1个人的信息
		for (int i = 0; i < nameByte.length; i++) {
			nameByte[i] = randomAccessFile2.readByte();
		}
		for (int i = 0; i < IDByte.length; i++) {
			IDByte[i] = randomAccessFile2.readByte();
		}
		name = new String(nameByte);
		ID = new String(IDByte);
		System.out.println("姓名:" + name + ",身份证号码:" + ID);

		// 读取第1个人的信息
		randomAccessFile2.seek(0);// 回到第1个字节前
		for (int i = 0; i < nameByte.length; i++) {
			nameByte[i] = randomAccessFile2.readByte();
		}
		for (int i = 0; i < IDByte.length; i++) {
			IDByte[i] = randomAccessFile2.readByte();
		}
		name = new String(nameByte, "GBK");
		ID = new String(IDByte);
		System.out.println("姓名:" + name + ",身份证号码:" + ID);
		randomAccessFile2.close();
	}

}

7、使用Apache IO库操作IO与文件

http://commons.apache.org/proper/commons-io/download_io.cgi     下载Apache IO库






猜你喜欢

转载自blog.csdn.net/Coloured_Glaze/article/details/52180846