笔记:
**使用转换流进行文件的复制
文本文件---字节流FileInputStream--> [InputStreamReader] -----字符流BufferedReader------>程序 * ------字符流BufferedWriter----->[OutputStreamWriter]-----字节流-FileOutputStream--->[ 输出目的/ 文件] * 编码: 字符串-->字节数组 * 解码: 字节数组-->字符串
/** RandomAccessFile :支持随机访问
* 1.既可以充当一个输入流,也可以充当一个输出流 ; read(byte b[])/write()
* 2.支持从文件的任意位置的开头进行读取和写入 ;
* raf.seek(long pos) //设置读指针的地址;
* raf.writeBytes(String s);//将一个字符串 写入文件,
* writeInt(int v);//写入一个int数据
* 3.支持从任意位置的读取和写入(插入);
*/
代码:
实验4: 使用转换流 进行文件的复制
@Test //实验4: 使用转换流 进行文件的复制 public void testTrans() throws IOException { //①声明②将地址加载进字符流,将字符流加载进缓冲流③read/write④close缓冲流) // 解码 File src=new File("D:\SZS文件夹\IO\hello.txt"); FileInputStream fis= new FileInputStream(src); InputStreamReader isr=new InputStreamReader(fis,"GBK"); BufferedReader br=new BufferedReader(isr); //编码 File dest=new File("D:\SZS文件夹\IO\转换流复制的hello.txt"); FileOutputStream fos = new FileOutputStream(dest); OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK"); BufferedWriter bw=new BufferedWriter(osw); char[] b=new char[1024]; int len; while((len=br.read(b))!= -1) { bw.write(b,0,len); } bw.flush(); br.close(); bw.close(); } }
使用 RandomAccessFile 类 进行进行文件的复制测试的代码:
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class TestRandomAccessFile { //进行文件的读/写 @Test //使用RandomAccessFile 进行文件的复制 public void test1() throws IOException { File src= new File("D:\SZS文件夹\IO\hello.txt"); File dest= new File("D:\SZS文件夹\IO\RandomAccessFile_hello.txt"); RandomAccessFile raf1=new RandomAccessFile(src,"r"); RandomAccessFile raf2=new RandomAccessFile(dest,"rw"); byte[] b = new byte[20]; int len=0; while((len=raf1.read(b)) !=-1){ raf2.write(b,0,len); } raf1.close(); raf2.close(); } @Test //使用RandomAccessFile 的seek() 设置读指针的位置 ,下面的栗子相当于忽略了前10个字符 public void test2() throws IOException{ File src= new File("D:\SZS文件夹\IO\hello.txt"); File dest= new File("D:\SZS文件夹\IO\RandomAccessFile2_hello.txt"); RandomAccessFile raf1=new RandomAccessFile(src,"r"); RandomAccessFile raf2=new RandomAccessFile(dest,"rw"); raf1.seek(10); //设置读指针的位置 byte[] b = new byte[20]; int len=0; while((len=raf1.read(b)) !=-1){ raf2.write(b,0,len); } raf1.close(); raf2.close(); } }