Java I/O (输入/输出)

这篇具有很好参考价值的文章主要介绍了Java I/O (输入/输出)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.流的概念

        流是一种有序的数据序列,根据操作类型,可以分为输入流和输出流两种。I/O流(输入输出)提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。

        1.1 输入流:

        程序从指向源的输入流中读取源中的数据,源可以是文件、网络、压缩包、其他数据。

        1.2 输出流:

        输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据吧信息传递到目的地。输出流的目标可以是文件、网络、压缩包、控制台、其他数据输出目标。

Java I/O (输入/输出),Java,java,开发语言

2.输入/输出流

        Java中所有的输入/输出流分为【字节输入/输出流】和【字符输入/输出流

2.1 字节输入流:InputStream类

        InputStream类是字节输入流的抽象类,是所有字节输入流的父类,该类中所有方法遇到错误都会发生IOException异常。

2.1.1 read()方法:

        从输入流中读取数据的下一个字节,返回0~255范围内的int字节值,如果到达流末尾而没有可用字节,则返回-1;

2.1.2 read(byte[] b)方法:

        从输入流中读取一定长度的字节,并以整数的形式返回字节数;

2.1.3 mark(int readlimit)方法:

        在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数;

2.1.4 reset()方法:

        将输入指针返回到当前所做的标记处;

2.1.5 skip(long n)方法:

        跳过输入流上的n各字节,并返回实际跳过的字节数;

2.1.6 markSupported()方法:

        如果当前流支持mark()/reset()操作就返回true;

2.1.7 close()方法:

        关闭此输入流,并释放与该流有关联的所有系统资源;

2.2 字节输入流:Reader类    

    

2.3 字节输出流:OutputStream类

        OutputStream类是字节输出流的抽象类,此抽象类是所有字节输出流类的父类(超类)。OutputStream类的所有方法都返回void,在遇到错误时都会引发IOException异常。

2.2.1 write(int b)方法:

        将指定的字节写入此输出流;

2.2.2 write(byte[] b)方法:

        将b个字节从指定的byte数组中写入到此输出流;

2.2.3 write(byte[] b, int off, int len)方法:

        将指定的byte数组b中从偏移量off开始的len个字节写入此输出流;

2.2.4 flush()方法:

        彻底完成输出并清空缓存区;

2.2.5 close()方法:

        关闭输出流,并释放与该流有关联的所有系统资源;

2.4 字符输出流:Writer类

3.File类

        File类是java.io包中唯一代表磁盘文件本身的对象。可以同File类中的方法来实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录,文件的长度,文件的读写权限等。

3.1 文件的创建与删除

使用File类创建文件对象有3种方法:

3.1.1 File(String pathname)

        此构造方法通过将指定的路径名字符串转换为抽象路径名,来创建一个新的File实例。

语法:

File file = new File(String pathname);

pathname为指定路径名称(包含文件名),如:File file = new File("/chuntian/word.txt")

3.1.2 File(String parent, String child)

        此构造方法根据定义父路径和子路径字符串(含文件名)创建一个新的File对象。

语法:

File file = new File(String parent, String child);

parent:父路径字符串,如“D:/doc”;

child:子路径字符串,如“word.txt”

3.1.3 File(File f, String child)

语法:

File file = new File(File f, String child);

f:父路径对象,如“D:/doc/”;

child:子路径字符串,如“word.txt”;

        通过File类创建一个文件对象后,如File file = new File("word.txt"),如果当前目录中不存在名为word.txt的文件,File类会通过调用createNewFile()方法创建一个名称为word.txt的文件;如果存在word.txt文件,可以通过调用文件对象的delete()方法删除这个文件。

package io;

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

public class FileTest {
    public static void main(String[] args) {
        File file = new File("./word.txt");   //创建文件对象file
        if (file.exists()) {
            file.delete();      //如果文件存在就删除文件
            System.out.println("文件已删除~");
        } else {
            try {
                file.createNewFile();       //如果文件不存在,创建文件
                System.out.println("文件已创建!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

输出:
        文件已创建!

3.2 获取文件信息

File类提供了很多方法来获取文件本身的信息,如:

File类的常用方法
方法 返回值 说明
getName() String 获取文件的名称
canRead() boolean 判断文件是否可读
canWrite() boolean 判断文件是否可写
exist() boolean 判断文件是否存在
length() long 获取文件的长度(以字节byte为单位)
getAbsolutePath() String 获取文件的绝对经
getParent() String 获取文件的父路径
isFIle() boolean 判断文件是否为文件
isDirectory() boolean 判断文件是否为一个目录
isHidden() boolean 判断文件是否为隐藏文件
LastModified() long 获取文件最后修改时间
package io;

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

public class FileTest {
    public static void main(String[] args) {
        File file = new File("word.txt");   //创建文件对象file
        if (file.exists()) {
            System.out.println("文件名称是:" + file.getName());
            System.out.println("文件长度是:" + file.length());
            System.out.println("该文件是隐藏文件吗?" + file.isHidden());
            System.out.println("文件的绝对路径是:" + file.getAbsolutePath());
        } else {
            System.out.println("该文件不存在");
        }
    }
}

输出:
        文件名称是:word.txt
        文件长度是:8
        该文件是隐藏文件吗?false
        文件的绝对路径是:/Users/jeanet/IdeaProjects/MyProject/word.txt

4.文件输入/输出流

4.1 字节的输入/输出:FileInputStream类和FileOutputStream类

        FileInputStream类是inputStream类的子类;

        构造方法:

        4.1.1 FileInputStream(String name)

                使用给定的文件名创建一个FileInputStream对象;

        4.1.2 FileOutputStream(File file)

                使用File对象创建FileInputStream对象;

        FileOutputStream类是outputStream类的子类。

        FileOutputStream与FileInputStream的构造方法类似,创建FileOutputStream对象时可以指定一个不存在的文件名,但此文件不能是一个已被其他程序打开的文件。

package io;

import java.io.*;

public class FileTest {
    public static void main(String[] args) {
        File file = new File("word.txt");   //创建文件对象file
        try {
            FileOutputStream fos = new FileOutputStream(file);  //创建一个FileOutputStream对象
            String mystr = "希望在田野上,我爱春田~";
            byte[] mybyte = mystr.getBytes();  //创建byte型数组
            fos.write(mybyte);      //将byte数组中的信息写入文件中
            fos.close();            //关闭流
        } catch (Exception e) {
            e.printStackTrace();    //输出异常信息

        }

        try {
            FileInputStream fis = new FileInputStream(file);    //创建FileInputStream对象
            byte[] mybyte = new byte[1024];     //创建byte数组
            int len = fis.read(mybyte);         //读取文件信息
            String fileinfo = new String(mybyte, 0, len);
            System.out.println("文件中的信息是:" + fileinfo);
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:
        文件中的信息是:希望在田野上,我爱春田~

4.2 字符的输入/输出:FileReader类和FileWriter类

        4.2.1 FileReader

                FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就能顺序地读取源文件中的字符内容,直到源的末尾或流被关闭。

        4.2.2 FileWriter

package io;

import java.io.*;

public class FileTest {
    public static void main(String[] args) {
        File file = new File("word.txt");   //创建文件对象file
        try {
            FileWriter fw = new FileWriter(file);   //创建FileWriter字符对象
            fw.write("春天在哪里呀?");
            fw.close();
        } catch (Exception e) {
            e.printStackTrace();    //输出异常信息

        }

        try {
            FileReader fr = new FileReader(file);   //创建FileReader对象
            char[] mychar = new char[1024];     //创建char型数组
            int len = fr.read(mychar);      //将字节读入数组
            String mystr = new String(mychar, 0, len);    //设置文本域的显示信息
            System.out.println("文件内容是:" + mystr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:
        文件内容是:春天在哪里呀?

5.带缓存的输入/输出流

        缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区,有了缓存区,在流上执行skip()、mark()、reset()方法就成为了可能。

5.1 字节的缓存输入/输出:BufferedInputStream类和BufferedOutputStream类

        BufferedInputStream类和BufferedOutputStream类可以对所有的InputStream类和OutputStream类进行带缓存区的包装以达到性能优化;

        构造方法:

        5.1.1 BufferedInputStream(InputStream in)      

        创建了一个带32个字节的缓存流;

        5.1.2 BufferedInputStream(InputStream in, int size)

        按指定大小来创建缓存区。

        5.1.3 BufferedOutputStream(OutputStream out)

        创建了一个带32个字节的缓存流;

        5.1.4 BufferedOutputStream(OutputStream out, int size)

        按指定大小来创建缓存区。

        flush()方法只对使用缓存区的OutputStream类的子类有效,用于在缓存区没满的情况下,也将缓存区的内容强制写入到外设,当调用close()方法时,系统在关闭流之前,也会将缓存区中的信息刷新到磁盘文件中。

Java I/O (输入/输出),Java,java,开发语言

5.2 字符的缓存输入/输出:BufferedReader类和BufferedWriter类

        BufferedReader类继承了Reader类,BufferedWriter类继承了Writer类,这两个类同样具有缓存机制,可以以行为单位进行输入/输出。

        5.2.1 BufferedReader类常用方法

                5.2.1.1 read()方法:

                读取单个字符;

                5.2.1.2 readLine()方法:

                读取一个文本行,并将其返回为字符串。若无数据可读,返回null;

        5.2.2 BufferedWriter类常用方法

                5.2.2.1 write(String s, int off, int len)方法:

                写入字符串的某一部分;

                5.2.2.2 flush()方法:

                刷新该流的缓存;

                5.2.2.3 newLine()方法:

                写入一个行分隔符;

        在使用BufferedWriter类的write()方法时,数据并没有立即写入输出流,而是首先进入缓存区中,如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。文章来源地址https://www.toymoban.com/news/detail-714712.html

package io;

import java.io.*;

public class Student {
    public static void main(String[] args) {
        String[] content = {"好久不见", "最近好吗?", "常联系~"};
        File file = new File("word.txt");

        try {
            FileWriter fw = new FileWriter(file);       //创建FileWriter对象
            BufferedWriter bw = new BufferedWriter(fw); //创建BufferedWriter对象
            for (int i = 0; i < content.length; i++) {
                bw.write(content[i]);   //将字符串数组中的元素写入到磁盘文件
                bw.newLine();
            }
            bw.close();
            fw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            FileReader fr = new FileReader(file);   //创建FileReader对象
            BufferedReader br = new BufferedReader(fr); //创建BufferedReader对象
            int i = 0;
            String s = null;
            while ((s = br.readLine()) != null) {
                i++;
                System.out.println("第" + i + "行的内容是:" + s);
            }
            br.close();
            fr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:
        第1行的内容是:好久不见
        第2行的内容是:最近好吗?
        第3行的内容是:常联系~

6.数据输入/输出流

6.1 DataInputStream

6.2 DataOutputStream

7.ZIP压缩输入/输出流

7.1 压缩文件:ZipOutputStream(OutputStream out)

7.2 解压缩文件:ZipInputStream(InputStream in)

到了这里,关于Java I/O (输入/输出)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】ACM模式下输入输出汇总(Java)

    (1)输入描述: (2)输出描述: (3)示例 输入: 输出: 代码: (1)输入描述: (2)输出描述: (3)示例 输入: 输出: 代码: (1)输入描述: (2)输出描述: (3)示例 输入: 输出: 代码: (1)输入描述: (2)输出描述: (3)示例 输入: 输出: 代码: (1)输入描述

    2024年02月12日
    浏览(115)
  • Java中的输入和输出

    Java中的输入和输出是非常重要的,可以让程序与用户进行交互,读取和写入数据。下面是一些Java输入和输出的常用知识总结: 1. 标准输入输出(System.in和System.out) : - 标准输入(System.in)是指从键盘或控制台读取数据,可以使用Scanner类来读取用户的输入。 - 标准输出(System.out

    2024年02月07日
    浏览(39)
  • java里的输入与输出

    一、概述 输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。 Java语言体系中,对数据流的主

    2024年02月07日
    浏览(35)
  • Java零基础入门-输入与输出

    哈喽,各位小伙伴们,你们好呀,我是喵手。   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,

    2024年02月05日
    浏览(37)
  • Java文件输入输出(简单易懂版)

    在Java中不论文件输入还是输出都会用到File类,参考这篇文章Java File类(文件操作类)详解 这里会涉及到绝对路径、相对路径、路径中的斜杠“/”和反斜杠“”,有些小伙伴可能不熟悉,参考这两篇文章绝对路径和相对路径详解, 斜杠’/’ 和反斜杠’’ 我们先来看一下此

    2024年02月06日
    浏览(45)
  • Java I/O (输入/输出)

            流是一种有序的数据序列,根据操作类型,可以分为输入流和输出流两种。I/O流(输入输出)提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。         程序从指向源的输入流中读取源中的数据,源可以是文件、网络、压缩包、其他数据。

    2024年02月08日
    浏览(33)
  • Java中简单的输入输出语句

    1.使用Scanner类 使用步骤: (1)导包 import java.util.Scanner; 这一步是必须要做的 !!! (2)使用Scanner创建对象 (3)输入数据 接下来用代码 区别next( )和nextLine( )。 next( )的实现: 因为其中有空格,所以== 当next( )遇到空格就停止执行。 nextLine( )的实现: 以上就是这两种输入输入字符串

    2024年02月07日
    浏览(44)
  • [JAVA] ACM模式下输入输出

    经典十一道题 题一 多行数据,有行数限制,每行有个数限制 输入描述: 输入的第一行包括一个正整数t(1 = t = 100), 表示数据组数。 接下来 t 行, 每行一组数据。 每行的第一个整数为整数的个数n(1 = n = 100)。 接下来n个正整数, 即需要求和的每个正整数。 输出描述: 每组数据

    2024年02月13日
    浏览(38)
  • java中字母、字符串,输入小写输出大写,输入大写输出小写、大小写转换

    思路: 1、利用“大小写字母之间正好相差32”这一特点                                                       2、用  toLowerCase()、toUpperCase() 字符串自带的方法  提示: Java中没有.nextChar()。 所以要读取char,我们使用  .next().charAt(0)  1、 输入小写输

    2024年02月07日
    浏览(93)
  • Java学习手册——第六篇输入输出

    几乎所有的开发语言都会有输入输出,程序的定义里面也有输入输出,可以见得输入输出是何等的重要。如果没有输入,人类如何与计算机交流?如果没有输出,一切努力都是白费,因为我们看不到结果。 这里的输入输出你可以简单的理解为人与人之间的沟通交流,虽然我们

    2024年02月02日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包