字节流与字符流
在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。
IO操作属于资源操作,一定要记得关闭
bufferedreader读者缓冲区
package xdl.day18;
import java.io.*;
public class TestBufferedReader {
public static void main(String[] args) {
try{
//1.创建BufferedReader类型的对象并关联到指定的文件
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("c:/a.txt")));
//2.读取文件中的内容并打印
String str = br.readLine();
System.out.println("读取到的数据内容是:" + str);//hello
//3.关闭流对象并释放相关的资源
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
DataInputStream数据输入流
package xdl.day18;
import java.io.*;
public class TestDataInputStream {
public static void main(String[] args) {
try{
//1.创建DataInputStream类型的对象与指定的文件关联
DataInputStream dis =
new DataInputStream(new FileInputStream("c:/a.txt"));
//2.读取文件中的整数值并打印出来
int res = dis.readInt();
System.out.println("读取到的整数是:" + res); //66
//3.关闭流对象并释放相关的资源
dis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
复制粘贴
package xdl.day18;
import java.io.*;
public class TestFileCopy {
public static void main(String[] args) {
try{
//1.创建FileInputStream类型的对象与指定的源文件进行关联
FileInputStream fis = new FileInputStream("c:/javaseday16-IO流常用的类-06.wmv");
//2.创建FileOutputStream类型的对象与指定的目标文件进行关联
FileOutputStream fos = new FileOutputStream("c:/javaseday16-IO流常用的类-07.wmv");
//3.不断地读取源文件中的内容并写入到目标文件中
/* a.每次读取一个字节并写入目标文件
int res = 0;
while( (res = fis.read()) != -1){
fos.write(res);
}
*/
// b.准备一个缓冲区,一次性将整个文件中的内容都读取出来
// 当一个.avi的电影大小是10G时 该方式就不太靠谱了
/*
byte[] data = new byte[fis.available()];
int res = fis.read(data);
System.out.println("res = " + res);
fos.write(data);
*/
//3.准备一个合理的缓冲区,以该缓冲区为单位进行读取,通常都是1024倍数
byte[] data = new byte[1024 * 8];
int res = 0;
while((res = fis.read(data)) != -1){
fos.write(data, 0, res);
}
System.out.println("文件拷贝成功!");
//4.关闭相关的流对象并释放资源
fis.close();
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
输出文本内容
package xdl.day18;
import java.io.FileOutputStream;
public class TestFileOutputStream {
public static void main(String[] args) {
try{
//1.创建FileOutputStream类型的对象与指定的文件关联
//若文件存在则清空文件中的原有内容
//若文件不存在则创建一个新的空文件
FileOutputStream fos = new FileOutputStream("c:/a.txt");
//若文件存在则以追加的方式建立关联,保留文件之前的内容
//若文件不存在则创建一个新的空文件
//FileOutputStream fos = new FileOutputStream("c:/a.txt", true);
//2.向文件中写入数据内容,写入一个字节后则光标指向下一个位置
fos.write(97); //97就是a的ASCII
fos.write(98); //98就是b的ASCII
fos.write(99); //99就是c的ASCII
fos.write("hello".getBytes());
System.out.println("写入数据成功!");
//3.关闭输出流对象并释放相关的资源
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}