Java 输出/输入字节流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40285302/article/details/82948909

输出字节流:outputStream 抽象类,表示所有字节输出流的超类,子类的开头就是功能

方法:
1.关闭字节流及相关资源 close()
2.刷新字节输出流
3.将字节数组(byte[])或者是字节(int b)写入输出流
字节流的写入/输出绝对是依赖于系统的。
子类:有各种输出的子类
FileOutputStream :将数据写入文件

FileOutputStream(File file) 
//创建文件输出流以写入由指定的 File对象表示的文件。  
FileOutputStream(File file, boolean append) 
// 在文件的末尾续写
package IO;

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

//字节输出流,将数据写到文件中
public class WriteFile_OutputStream {
    public static void main(String[] args)throws IOException {
        File dir = new File("F:\\File\\tempfile");
        if(!dir.exists()){//创建临时目录
            dir.mkdir();
        }
        File file = new File(dir,"file");
        //在创建字节流输出对象时,明确输出目的地,如果文件不存在就会创建,如果存在就会被覆盖
         FileOutputStream outputStream = new FileOutputStream(file);//会抛出异常
         byte[] b = "abdhdb".getBytes();
         outputStream.write(b);//会抛出异常

        //在文件中续写
        FileOutputStream file2 = new FileOutputStream(file,true);
        byte[] b2 = "java".getBytes();
        file2.write(b2);

        //换行续写 在出入的字节数组中加入换行符//为了提高程序的跨平台性,获取系统中的换行符
        final String n = System.getProperty("line.separator");
        byte[] b3 = (n+"itcast").getBytes();
        file2.write(b3);
        //关闭字节流
        outputStream.close();
    }
}

在创建字节流输入对象,写入还有关闭的时候会发生异常,异常处理(涉及资源比较麻烦)

 File file = new File(dir,"file");
        //在创建字节流输出对象时,明确输出目的地,如果文件不存在就会创建,如果存在就会被覆盖
        FileOutputStream outputStream =null;
         try {
             outputStream = new FileOutputStream(file);//会抛出异常
         byte[] b = "abdhdb".getBytes();
         outputStream.write(b);}//会抛出异常
         catch (IOException e) {
            //能处理就写处理,不能处理就声明
         }
         finally {
             if(outputStream!=null){
                 try{
                     outputStream.close();
                 }
                 catch (IOException e){
                     throw new RuntimeException("");
                 }
             }
         }

异常出现的原因:三句都是IOException
资源关闭是一定要执行的写在第一个try catch 的finally 中。
字节输出流的对象是在第一个大括号中定义的,所以要将对象的定义放到异常处理之外

在字节流关闭的时候也会出现异常,导致无法关闭,但是这个关闭异常是系统可能导致的问题,但是也要写异常处理,并且要将异常转化为运行时异常,一旦关闭失败就要将程序停下来

最后编译时可以看见的异常已经处理完毕,但是担当代码运行时,如果文件的地址是不存在的,那么还是会出现运行时异常,一个是创建时无法找到地址,这个已经处理,还有一个是关闭时的空指针异常,地址不存在,无法创建文件那么,字节流对象就是一个空指针,何来关闭一说,所以最后加一个判断。不为空才关闭

——————————————————————————————————————
读取数据:
InputStream 输入流的超类
read() :读取单个字节
read(byte[] b) :一次读取一个字节数组的数据,这个数组是一个缓冲数组,一般大小定义为1024 的整数倍。 /
/返回的整型值 是读取的字节个数,读到末尾返回-1
读取文件的子类 FileInputStream
两个都通过循环读取
int read();

 int ch =0;
        while((ch=in.read())!=-1){
        //在文件的末尾有结束符(有系统定义)返回值是读到的数据(0-255 int ),读到末尾返回-1
            System.out.print((char)ch);
        }

int read(byte[] b);
每次读取到的数据就存到存到缓冲数组中,返回值为读取到的字节个数,返回-1则结束读取。

 byte[] buf = new byte[1024];//数组的大小最好为1024 的整数倍
        int len=0;
        while((len=in.read(buf))!=-1){
            String str =new String(buf,0,len);//每次存到数组中的都是读取到的数据,那转化到的
            System.out.println(str);
        }

计算机中数据的存储是以字节为单位(一个字节,再64 位的计算机中占八位)
一个字节可以表示:
1.ASC|| 码
2.有符号数:-128–127
3.无符号数: 0–255
数据的输入输出也是按照字节为单位

(在市里的文件中存储的都是单个字符,所以只要用char 转换就可以看见文件中的数据)
————————————————————————————
在写代码的过程中出现了一个问题:在程序运行时在手动创建的文件无法被识别
其实不是识别不了而是自己没有吧最后的文件名写对,如:记事本文件file 但是在地址查询时,他的完整名字:file.txt .如果在命名记事本文件时就命名为:file.txt。那么在寻址时他的完整名字:file.txt.txt。

猜你喜欢

转载自blog.csdn.net/qq_40285302/article/details/82948909
今日推荐