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库