ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO写入数据

2022-01-26 02:02:35  阅读:163  来源: 互联网

标签:java io 写入 write FileOutputStream IO 数据 public fileOutputStream


IO写入数据

基础的写入

  • 创建字节输出流对象
  • 将字节数据从内存中输出至硬盘以达到写入数据
  • 会被抛来异常,可以选择抛出或者try-catch处理
  • 调用write()方法将指定字节写入此文件输出流中
  • 所有流最后都要释放资源
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) throws IOException {
        
        FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\iobase\\java.txt");
        /*
        * 创建字节输出流对象做了三件事情
        *   1.调用系统功能创建了文件
        *   2.创建了对象
        *   3.使对象指向文件
        * */

        // 一次只能写一个字节数据
        // 97为a
        fileOutputStream.write(97);
        // 如果想要数字97
        // 57为字符9
        fileOutputStream.write(57);
        // 55为字符7
        fileOutputStream.write(55);

        // 所有流最后都要释放资源
        // 关闭此文件输出流并释放相关联的任何系统资源
        fileOutputStream.close();
    }
}

两种构造方法

FileOutputStream两种构造方法,两种结果没有区别

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1{
    public static void main(String[] args) throws IOException {
        // 参数为
        // 1.String
        FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\write\\java.txt");
        /*
        * 源码:
        * public FileOutputStream(String name) throws FileNotFoundException {
        *   this(name != null ? new File(name) : null, false);
        * }
        * 这一种构造方法会自动new一个File对象
        * */

        // 2.File
        File file = new File("java基础\\src\\com\\io\\write\\java.txt");
        FileOutputStream fileOutputStream1 = new FileOutputStream(file);
    }
}

写入数据的三种方式

import java.io.FileOutputStream;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\write\\java.txt");
        // 写数据的三种方式
        // 1.public void write(int b)
//        fileOutputStream.write(97);
//        fileOutputStream.write(98);
//        fileOutputStream.write(99);

        // 2.public void write(byte b[])
//        byte[] bytes = {97,98,99};
//        fileOutputStream.write(bytes);


        // 更简单的方法
        // 在String类中有一个方法
        /*
        * 源码:
        * public byte[] getBytes() {
            return StringCoding.encode(value, 0, value.length);
        }
        * */
        // 所以可以写成
        byte[] bytes = "abc".getBytes();
//        fileOutputStream.write(bytes);

        // 3.public void write(byte b[], int off, int len)
        // 从bytes数组中下标为1开始写2个
        fileOutputStream.write(bytes,1,2);

        // 最后释放资源
        fileOutputStream.close();
    }
}

两个问题:

  1. 字节流写数据如何实现换行
  2. 字节流写数据如何实现追加写入
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) throws IOException {
//        FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\question\\java.txt");

        /*
         * 问题:如何每次输入结束时换行?
         * 不同的操作系统的换行符是不一样的
         *   1.Windows:\r\n
         *   2.Linux:\n
         *   3.Mac:\r
         * */

        /*
         * 问题:字节流写数据每次写入都会覆盖,如何实现追加写入
         * FileOutputStream中有可以追加的构造方法
         * 源码:
         * public FileOutputStream(String name, boolean append) throws FileNotFoundException{
                this(name != null ? new File(name) : null, append);
           }
           *如果第二个布尔值的参数为true则写入在文件的末尾而不是开头
         * */

        FileOutputStream fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\question\\java.txt", true);

        // 写十次Hello数据
        for (int i = 0; i < 10; i++) {
            fileOutputStream.write("hello".getBytes());
            fileOutputStream.write("\r\n".getBytes());
        }

        //释放资源
        fileOutputStream.close();
    }
}

字节流写数据加异常处理

  • 调用FileOutputStream类的构造函数会收到抛来的异常
  • 之前都是抛出解决的
  • 这次我们使用try-catch处理
  • 使用finally分支来善后
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) {

        FileOutputStream fileOutputStream = null;

        try {
             fileOutputStream = new FileOutputStream("java基础\\src\\com\\io\\exception\\java.txt");
            // 在这一步写入时会报出异常
            fileOutputStream.write("hello".getBytes());
            // 释放资源就没有执行到,就一直占用资源
            // 所以使用finally分支来善后,除非JVM退出,无论如何都会执行
            // fileOutputStream.close();
        } catch (IOException e) {
            // 报出异常后会走到这里
            e.printStackTrace();
        } finally {
            // 确保new FileOutputStream能返回给fileOutputStream值
            // 防止空指针异常
            if (fileOutputStream != null){
                try {
                    // 因为close()会报错,所以用try-catch处理
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

标签:java,io,写入,write,FileOutputStream,IO,数据,public,fileOutputStream
来源: https://www.cnblogs.com/coderDreams/p/15845238.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有