FileInputStream和FileOutputStream读写文件,然后实现文件的拷贝。

版权声明: https://blog.csdn.net/Chianz632/article/details/79946851

IO流

Java里面分为两种流:字节流和字符流。如果细分的话有,可分为:4个文件流,4个缓冲流,2个转换流,2个打印流,2个序列化流,2个数据流。

//文件流
FileInputStream            //字节输入流
FileOutPutStream           //字节输出流
FileReader                 //字符输入流
FileWriter                 //字符输出流

//缓冲流
BufferedInputStream        //字节输入缓冲流
BufferedOutputStream       //字节输出缓冲流
BufferedReader             //字符输入缓冲流
BufferedWriter             //字符输出缓冲流

//序列化流
ObjectInputStream          
ObjectOutputStream

//转换流(字符流)  将字节流转换为字符流
InputStreamReader
OutputStreamWriter

//数据流
DataInputStream
DataOutputStream

//打印流
PrintWriter
PrintStream

输入输出方向

对于IO流而言,IO(input Output)输入输出的意思。在输入输出之间我们需要找一个参照物,然后判断相对于参照物而言是输入还是输出。而我们一般会把内存作为参照物。当我们打开一个应用程序时,计算机会把那个应用程序加载到内存,然后等待CPU执行,对内存就相当于输入。当我们写代码时,代码首先会进内存里面,按下Ctrl+S时,计算机会将内存中的代码保存到硬盘中,对内存而言就相当与输出。带有Input  Reader输入(读),Output Writer输出(写)。

字节流和字符流

Stream表示基于字节流,Writer和Reader表示基于字符流。


用字节流FileInputStream和FileOutputStream来读写文件

package FileStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class File_Stream {
    public static void main(String[] args) throws IOException {
        Scanner sca=new Scanner(System.in);

        //写文件
        System.out.print("请输入文件名:");
        String name=sca.next();
        File file=new File(name+".txt");//文件名        相对路径(项目名根目录下)
//      FileOutputStream fs=new FileOutputStream(file);                //如果文件存在 覆盖
        FileOutputStream fos=new FileOutputStream(file,true);//true表示追加,如果文件存在 向里面继续添加内容
        System.out.println("请输入写入的内容:");
        String str=sca.next();
        byte bytes[]=str.getBytes();         //FileOutputStream 是基于字节流  把要写入的信息 保存到字节数组中
        fos.write(bytes,0,bytes.length);//将字节数组中全部内容写到文件中   从0—数组的长度
        fos.close();//关闭流
        System.out.println("文件写入成功!");

        //读文件
        FileInputStream fis=new FileInputStream(file);
        byte bt[]=new byte[1024];//1KB       每次最多读取的1KB  根据文件大小而定
        int temp=0;
        while((temp=fis.read(bt))!=-1){    //将数据保存到数组(缓冲区)中 并返回读取的字节数  -1表示读完了
            System.out.println(new String(bt,0,temp));//输出数组中保存内容 按照每次读取的字节数
        }
        fis.close();
    }
}

运行结果:


由于FileInputStream和FileOutputStream是基于字节流的,所以每次都需要定义byte数组对读写进行操作。

PS:如果单独读取一个文件时,出现了乱码。可能是字符集不同,Eclipse默认为GBK,IDEA默认为UTF-8,改成对应的字符集即可。

用字节流FileInputStream和FileOutputStream来Copy文件

package FileStream;

import java.io.*;

public class File_Copy {
    public static void main(String[] args) throws IOException {
        File file=new File("dome.txt");
        if(!file.isFile()){    //判断文件是否存在
            System.out.println("该文件不存在,无法Copy!");
            return;
        }

        FileInputStream fis=new FileInputStream(file);   //"src\\"+file.getName()
        FileOutputStream fos=new FileOutputStream("src/"+file.getName());//把文件拷(输出)到src下

        byte bytes[]=new byte[1024];
        int temp=0;  //边读边写
        while((temp=fis.read(bytes))!=-1){  //读
            fos.write(bytes,0,temp);   //写
        }
        fis.close();
        fos.close();
        System.out.println("文件拷贝成功!");
    }
}

运行结果:


在Copy文件的时候,只需要将FileInputStream和FileOutputStream一起使用,边读边写,就可以达到Copy文件的目的。


   每日鸡汤:比你优秀的人仍在努力,比你差的人还没放弃,你没还有什么借口不坚持下去。


Over!

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页