1.这个类用于简单的io流,可以用来复制拷贝文件
我们可以先简单的将这个方法封装
这时候我们获取到了is的输入流,以及os的输出流
我们要将is里的数据读入到os里面去,
有了输入流之后,我们就要从输入流中获取数据,如何获取呢,FileInputStream已经有方法.read(),就是读取(这个方法读取的是int类型的数据)
public class copyFile {
我们可以先简单的将这个方法封装
public static void copy(){
try {
在新建一个输入,一个输出的io流的过程中,会遇到报错,这时候我们需要将可能产生异常的代码块包起来
这时候我们获取到了is的输入流,以及os的输出流
FileInputStream is=new FileInputStream("a.txt");
FileOutputStream os=new FileOutputStream("c.txt");
我们要将is里的数据读入到os里面去,
这时还会有异常抛出,我们还要将其包起来
int a;
定义一个int a,将is读取的数据赋值给a,有了输入流之后,我们就要从输入流中获取数据,如何获取呢,FileInputStream已经有方法.read(),就是读取(这个方法读取的是int类型的数据)
while((a=is.read())!=-1){ os.write((char)a); }
os.close();is.close();
} catch (FileNotFoundException e) {// TODO Auto-generated catch block e.printStackTrace();} catch (IOException e) { // TODO Auto-generated catch blocke.printStackTrace(); }}
2.io流,可以用来复制拷贝图片
和上述1的方法几乎没有区别,唯一有一点区别的是,在is输入流读取数据时,效率变得更高了,使用byte数组来读取,避免一次读一个的低效率,
public static void copy1() { try { FileInputStream is=new FileInputStream("1111.jpg"); FileOutputStream os=new FileOutputStream("222.jpg"); byte a[]=new byte[1000];//使用byte数组一次性读1000个数据进去 int b; while((b=is.read(a))!=-1){ os.write(a); } is.close();//关闭输入流 os.close();//关闭输出流 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
3.上述两个方法都还可以在速度上进行进一步的改进, 在复制一个视频文件时候,再用上述的方法就会显得比较慢,这时我们就可以采用改进的措施了。我们可以在is输入流中采取快速读取数据的数组,还可以在os输出流中快速写入数据的数组
先新建一个数组,尽量大一点,我在这里用1000,例如,这个文件有10000字节,我们用数组只需要十次就可以读完
先新建一个数组,尽量大一点,我在这里用1000,例如,这个文件有10000字节,我们用数组只需要十次就可以写完
public static void copyQuick() { try { FileInputStream fis=new FileInputStream("录像1.wmv"); FileOutputStream fos=new FileOutputStream("hhh.wmv"); byte bi[]=new byte[1000]; int a; while((a=fis.read(bi))!=-1){ byte mi[]=new byte[a];//这里新建一个数组是为了防止读取数据中会有冗余的数据 for(int m=0;m<a;m++){//把原来读入的数组的数据传入到这个新的数组中去 mi[m]=bi[m]; } fos.write(mi);//然后再将新的数组的数据写入到输出流中 } fis.close(); fos.flush(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
// 为了输入数据更加方便,我们要引入PrintWriter public static void test11() { try { PrintWriter pw=new PrintWriter("e.txt"); pw.print("vbfshvjfdlshgifugaishrefgajdloju"); pw.flush(); pw.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 读文件的时候更简单一点 public static void test1() { try { Scanner sc=new Scanner(new FileInputStream("e.txt")); while(sc.hasNextLine()){ System.out.println(sc.nextLine()); } sc.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }