java I/O系统(输入输出流)

Posted 涛哥J133

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java I/O系统(输入输出流)相关的知识,希望对你有一定的参考价值。

java I/O系统(输入输出流)

流的特性1.含有流质(数据)2.它有方向(读或写)

流的分类:

输入流和输出流

输入流:io包中的输入流继承自抽象类InputStream或Reader

输出流:io包中的输入流继承自抽象类OutputStream或Writer

字节流和字符流

注:1字节代表1个英文单词存储的数据大小,一个汉字占两字节

1.字节流:以byte为最小单位传送,继承自抽象类InputStream或OutputStream,用于处理二进制文件,InputStream为读取字节流的父类,OutputStream为写入字节流的父类。

低级字节流:分为3类

对二进制文件进行读写操作的FileInputStream和FileOutputStream。 对内存缓冲区的字节数组进行读写操作的ByteArrayInputStream和ByteArrayOutputStream 对线程管道进行读写操作的PipedInputStream和PipedOutputStream

高级字节流:分为3大类

过滤流类:在将数据实际写入到输出流之前对输出进行预处理,或者在读取数据之后对输入进行后期处理。都是FileInputStream和FileOutputStream的子类。

对象流:包括ObjectInputStream和ObjectOutputStream

    Student stu=new Student();
    FileOutputStream fos=new FileOutputStream(new File("f:\\user.txt"));
    ObjectOutputStream os=new ObjectOutputStream(fos);
    os.writeObject(stu);
    os.close();
    将实例化的Student类的对象stu写出

合并:ScquenceInputStream类可以实现两个文件的合并操作。

2.字符流:以char为最小单位传送,继承自抽象类Reader或Writer

字符流用于处理文本文件,所有字符流都继承于抽象类Reader和Writer两个父类。均是以字符为单位执行操作。

3.节点流:可直接从一个特定的数据源读写数据的流。从InputStream或Reader派生的Read()方法。从OutputStream或Writer派生的Writ()方法。

BufferedInputStream类:处理的是内存缓冲区中的数据。

4.对象流:java提供了对象序列化机制使ObjectInputStream和ObjectOutputStream完成基于对象的读写。

使用输入缓冲流BufferedIuputStream写入数据:

    File file=new File("f:\\test.txt");//找到文件,再覆盖
    byte[] b=new byte[(int) file.length()];
    BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
    int i=0;
    while((i=bis.read(b))!=-1){
        System.err.println(new String(b,"gbk"));

使用BufferedReader读取文件:

    File file=new File("f:\\test3.txt");
    BufferedReader brd=new BufferedReader(new FileReader(file));
    System.out.println(brd.readLine());//读一行
    int i=0;
    while((i=brd.read())!=-1){
        System.err.print((char)i);

使用FileInputStream读取文件:

    File file=new File("f:","int.java");
    FileInputStream fis=new FileInputStream(file);
    //读取文件
    System.out.println(file.length());
    int n=0;
    byte[] b=new byte[(int) file.length()];
    while((n=fis.read(b))!=-1){//读取完毕
        System.out.println(new String(b,0,n));
        System.out.println();

使用FileReader读取文件:

File file=new File("f:\\test3.txt");
    FileReader fr=new FileReader(file);
    int n=0;
    while((n=fr.read())!=-1){
        System.out.print((char)n);

使用FileWrite写入数据:

//File file=new File("f:\\test3.txt");//直接在f盘中创建一个test.txt
    FileWriter fw=new FileWriter(new File("f:\\test3.txt"),true);//true代表可以继续追加,不覆盖
    String s="明天星期3\r\n";
    //s.getBytes();//将字符形式转换成Byte形式
    fw.write(s);//写入
    fw.close();

文件的复制输入输出流:

File file=new File("f:\\1.jpg");//找到文件,否则就新建一个文件
    File file2=new File("f:\\test2.jpg");//移到test2.jpg中
    FileInputStream fis=new FileInputStream(file);//将文件1.jpg输入流导入
    FileOutputStream fos=new FileOutputStream(file2);//将文件test2.jpg输出流导出
    int n=0;
    while((n=fis.read())!=-1){//开始读取
        fos.write(n);//开始写入
    }
    fis.close();
    fos.flush();
    fos.close();

上传头像

    File file=new File(student.getHeadPortrait());
    FileInputStream fis=new FileInputStream(file);
    File file2=new File("f:\\demo\\"+student.name+".jpg");//f:\\文件夹名称为:固定格式,进入哪个文件夹

    if(file2.exists()){//存在,看Api            
        file2.createNewFile();//创建文件
}
    FileOutputStream fos=new FileOutputStream(file2);
    int n=0;
    while((n=fis.read())!=-1){//开始读取
        fos.write(n);//开始写入
    }
    fis.close();
    fos.flush();
    fos.close();

IO操作步骤:

1.建立流 2.操作流 3.关闭流

文件类

File类有4个构造方法

1.public File(String pathname):创建一个与指定路径名关联的File对象。

File file=new File("f:\\test3.txt");

2.public File(String parent,String child):使用指定参数创建一个File对象。

File file=new File("f:","test3.txt");

3.public File(String parent,String child):与上一个相同,除了目录是一个File对象而不是字符。

4.public File(URI uri):使用给定的java.net.URI对象创建一个File对象。

方法

1.file.mkdir();创建目录 file.getCanonicalPath()获取当前路径

    File file=new File("f://demo");//在f盘中创建demo的文件
    file.mkdir();//创建目录
    System.out.println(file.getCanonicalPath());//获取当前路径

2.boolean createNewFile():创建文件;boolean exists():判断文件或目录是否存在

    File file2=new File("f:\\demo\\"+student.name+".jpg");//f:\\文件夹名称为:固定格式,进入哪个文件夹
    if(file2.exists()){//存在,看Api
        file2.createNewFile();
}

以上是关于java I/O系统(输入输出流)的主要内容,如果未能解决你的问题,请参考以下文章

java I/O系统

Java I/O系统学习系列二:输入和输出

java I/O流基础(知识+代码示例)

java I/O流基础(知识+代码示例)

I/O系统 (输入/输出)

Java中的I/O流