javaIO流04:FileOutputStream详解,应用例子文件拷贝

本文详细介绍了FileOutputStream类的功能及用法,包括如何利用该类向文件中写入数据、创建文件以及实现文件拷贝等功能。同时,还提供了具体的代码示例来帮助读者更好地理解和掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FileOutputStream

  1. 关系图
    在这里插入图片描述
  2. FileOutputStream类中的方法
用法解释
void close()关闭此文件输出流并释放与此流相关联的任何系统资源。
protected void finalize()清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。
FileChannel getChannel()返回与此文件输出流相关联的唯一的FileChannel对象。
FileDescriptor getFD()返回与此流相关联的文件描述符。
void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。
void write(byte[] b, int off, int len)将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。
void write(int b)将指定的字节写入此文件输出流。
  1. FileOutputStream用法详解
    向文件中写入数据,没有文件就创建文件
 @Test
    public void Test(){
        //目录IOFile下没有news5.txt这个文件
        String filePath="D:/IOFile/news5.txt";
        FileOutputStream fileOutputStream=null;
        try {
            //*当我们使用这个方式去写入数据时,发现新写入的数据会覆盖原来的数据(多次运行,数据都一样,新数据覆盖了旧数据)
     //       fileOutputStream= new FileOutputStream(filePath);
            //*当使用这个方式时,新加入的数据会在原来数据的后面加入(多次运行,原来的数据不会消失,数据会叠加)
            fileOutputStream= new FileOutputStream(filePath,true);
            //1.写入字符串,调用的wirte方法可以写入一个字节数组
            String w="hello,world";
            //这里的getBytes方法就是将字符串转换为字符数组
            fileOutputStream.write(w.getBytes());

            //2.调用的wirte方法也可以只写入字符串指定下标的字符
            fileOutputStream.write(w.getBytes(),1,5);//从下标为1开始,写入后面的5个字节

            //3.写入一个数据,调用的wirte也可以只写入一个字节
            fileOutputStream.write('!');


            System.out.println("输出数据成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            }
        }
    }

FileOutputStream与FileInputStream的使用

  • 文件拷贝
public class Demo6 {
    public static void main(String[] args) {

    }
    @Test
    public void Test(){
        //所需拷贝文件位置
        String fileInputPath="D:/IOFile/news5.txt";
        //文件拷贝到哪
        String fileOutputPath="D:/IOFile/news/news5.txt";
        //因为需要在finally中调用close方法,如果在try中直接定义对象,对象的作用域只在try中所以在try的外面定义
        FileOutputStream fileOutputStream=null;
        FileInputStream fileInputStream=null;
        try {
            fileOutputStream = new FileOutputStream(fileOutputPath);
            fileInputStream = new FileInputStream(fileInputPath);
            byte[] bytes=new byte[128];
            int readlen=0;
            //以数组bytes进行读取,读取返回的是int类型的字节长度,读取内容在bytes数组中
            while((readlen=fileInputStream.read(bytes))!=-1){
                //然后以数组bytes进行输出,每次输出从下标为0的字节开始,往后输出readlen个字节
                     fileOutputStream.write(bytes,0,readlen);
            }
            System.out.println("文件拷贝正常");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream!=null){
                   fileInputStream.close();
                }
                if (fileOutputStream!=null){
                    fileOutputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值