• 98.Java中IO流_字节流_OutputStream


    OutputStream

    字节输出流

    案例:

       1,写代码实现把"Hello World!"写到"c:/a.txt"文件中。

          a, c:/a.txt不存在时,测试一下。

          b, c:/a.txt存在时,也测试一下。

          要写两个版本:

          a, 使用write(int b) 实现。

          b, 使用write(byte[] b) 实现。

       2,在已存在的c:/a.txt文本文件中追加内容:“Java IO”。

    显然此时需要向指定文件中写入数据。

    使用的就是可以操作文件的字节流对象。OutputStream。该类是抽象类,需要使用具体的实现类来创建对象查看API文档,找到了OutputStream的实现类FileOutputStream 创建FileOutputStream 流对象,必须指定数据要存放的目的地。通过构造函数的形式。创建流对象时,调用了系统底层的资源。在指定位置建立了数据存放的目的文件。

    流程:
        1:打开文件输出流,流的目的地是指定的文件    
        2:通过流向文件写数据
        3: 用完流后关闭流

    1.1.   输出流写出方式1:

    使用write(int b)方法,一次写出一个字节.

    在C盘下创建a.txt文本文件

    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class IoTest2 {
        public static void main(String[] args) throws IOException {
            String path = "c:\a.txt";
            writeTxtFile(path);
        }
    
        private static void writeTxtFile(String path) throws IOException {
            // 1:打开文件输出流,流的目的地是指定的文件
            FileOutputStream fos = new FileOutputStream(path);
    
            // 2:通过流向文件写数据
            fos.write('j');
            fos.write('a');
            fos.write('v');
            fos.write('a');
            // 3:用完流后关闭流
            fos.close();
    
        }
    }

    当c盘下的a.txt不存在会怎么样?

    测试:将c盘下的a.txt文件删除,发现当文件不存在时,会自动创建一个,但是创建不了多级目录。

    注意:使用write(int b)方法,虽然接收的是int类型参数,但是write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。

    1.2. 输出流写出方式2:

    使用write(byte[] b),就是使用缓冲.提高效率.

    上述案例中的使用了OutputStram 的write方法,一次只能写一个字节。成功的向文件中写入了内容。但是并不高效,如和提高效率呢?是否应该使用缓冲,根据字节输入流的缓冲原理,是否可以将数据保存中字节数组中。通过操作字节数组来提高效率。查找API文档,在OutputStram类中找到了write(byte[] b)方法,将 b.length 个字节从指定的 byte 数组写入此输出流中。

    如何将字节数据保存在字节数组中,以字符串为例,”hello , world” 如何转为字节数组。显然通过字符串的getBytes方法即可。

    public class IoTest2 {
        public static void main(String[] args) throws IOException {
            String path = "c:\a.txt";
            writeTxtFile(path);
        }
    
        private static void writeTxtFile(String path) throws IOException {
            // 1:打开文件输出流,流的目的地是指定的文件
            FileOutputStream fos = new FileOutputStream(path);
    
            // 2:通过流向文件写数据
            byte[] byt = "java".getBytes();
            fos.write(byt);
            // 3:用完流后关闭流
            fos.close();
        }
    }

    仔细查看a.txt文本文件发现上述程序每运行一次,老的内容就会被覆盖掉。,那么如何不覆盖已有信息,能够往a.txt里追加信息呢。查看API文档,发现FileOutputStream类中的构造方法中有一个构造可以实现追加的功能FileOutputStream(File file, boolean append)  第二个参数,append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处

    private static void writeTxtFile(String path) throws IOException {
            // 1:打开文件输出流,流的目的地是指定的文件
            FileOutputStream fos = new FileOutputStream(path,true);
    
            // 2:通过流向文件写数据
            byte[] byt = "java".getBytes();
            fos.write(byt);
            // 3:用完流后关闭流
            fos.close();
        }
    author@nohert
  • 相关阅读:
    [轉]Discuz!NT 数据库读写分离方案
    [轉]最流行的PHP MVC框架
    [轉]关于MS SQL的执行计划
    [轉]Oracle读写分离架构
    [轉]資料庫讀寫分離
    [轉]SQL Server 老是死锁,或提示进程已牺牲,怎麽解决
    [轉]让IIS支持解析json
    [轉]jquery.validate全攻略
    [轉]Flex判断对象的类型
    [轉]mssql 数据表修复方法
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13624605.html
Copyright © 2020-2023  润新知