Java输入输出

作者: 官子寒 | 来源:发表于2019-12-25 12:34 被阅读0次
    • File类

    1. File类

    • File能新建、删除、重命名文件和目录,但不能访问文件内容本身

    1.1 访问文件和目录

    相关方法:

    方法名 作用
    String getName() 返回File对象所表示的文件名或路径名
    String getPath() 返回File对象所表示的路径名
    String getAbsolutePath() 返回File对象所表示的绝对路径名
    String getParent() 返回File对象所表示的文件父目录名
    boolean renameTo(File newName) 重命名此File对象所对应的文件或目录
    boolean exists() 是否存在
    boolean isFile(File) 是否是文件
    boolean isDirectory(File) 是否是目录
    boolean createNewFile() 当该文件不存在时,创建一个该File对象
    boolean mkdir() 创建一个File对象对应的目录
    boolean delete() 删除File对象所对应的文件或路径
    public static void main(String args[]) {
            File file = new File("test2.txt");
            if(file.exists()){
                System.out.println("File exists");
                System.out.println(file.getParent());
                System.out.println(file.getAbsolutePath());
            }
            else{
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    1.2 文件过滤器

    File类的list()方法可以接受一个FilenameFilter参数,通过该参数可以只列出符合条件的文件

    File currentPath = new File(".");
    String[] nameList = currentPath.list(((dir, name) -> name.endsWith(".txt")));
    for(String name: nameList){
           System.out.println(name);
    }
    

    2. Java IO流

    流的分类:
    1. 输入流和输出流

    • 输入流:只能从中读取数据,而不能向其写入数据
    • 输出流:只能向其写入数据,而不能向其读取数据

    2. 字节流和字符流

    • 字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符
    • 字节流以InputStreamOutputStream作为基类,而字符流由ReaderWriter作为基类

    3. 节点流和处理流

    • 节点流直接连接数据源,处理流通过封装后的流来实现数据读/写功能

    3. 字节流和字符流

    3.1 InputStream 和 Reader

    InputStream里包含如下方法:

    方法名 作用
    String read() 从输入流中读取单个字节,返回读取的字节数据
    String read(byte[] b) 从输入流中最多读取b.length个字节的数据,并存储在b中,返回读取的字节数
    String read(byte[] b,int off,int len) 从输入流中从off开始最多读取len个字节的数据,并存储在b中,返回读取的字节数

    Reader里包含如下方法:

    方法名 作用
    String read() 从输入流中读取单个字节,返回读取的字节数据
    String read(char[] cbuf) 从输入流中最多读取b.length个字节的数据,并存储在b中,返回读取的字节数
    String read(char[] cbuf,int off,int len) 从输入流中从off开始最多读取len个字节的数据,并存储在b中,返回读取的字节数
    try {
                FileInputStream fin = new FileInputStream("test.txt");
                byte[] charset = new byte[5];
                int hasRead = 0;
                while((hasRead = fin.read(charset))> 0 ){
                    System.out.println(hasRead);
                };
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    结果

    3.2 outputStream 和 Writer

    outputStream / Writer 里包含如下方法:

    方法名 作用
    String write() 从输入流中读取单个字节,返回读取的字节数据
    String write(byte[] b / char[] cbuf) 从输入流中最多读取b.length个字节的数据,并存储在b中,返回读取的字节数
    String write(byte[] b / char[] cbuf,int off,int len) 从输入流中从off开始最多读取len个字节的数据,并存储在b中,返回读取的字节数

    4. 输入/输出流体系

    Java输入输出流体系
    • 转换流:将字节流转换成字符流
    • 推回输入流
    方法名 作用
    String unread(int b) 将一个字节/字符数组内容推回到缓冲区里,从而允许重复读取刚刚读取的内容
    String unread(byte[] b / char[] cbuf) 将一个字节/字符数组内容推回到缓冲区里,从而允许重复读取刚刚读取的内容
    String unread(byte[] b / char[] cbuf,int off,int len) 将一个字节/字符数组内容从off开始,长度为len推回到缓冲区里,从而允许重复读取刚刚读取的内容

    注意:read方法总是先从缓冲区中读取内容,默认的推回缓冲区的长度为1,所以需要指定缓冲区的长度

    5. 重定向标准输入/输出

    System.in类和System.out类代表标准的输入和输出,分别从键盘输入和从电脑屏幕输出
    在System类里提供了如下的重定向方法

    方法名 作用
    static void setErr(PrintStream err) 重定向标准错误输出流
    static void setIn(InputStream in) 重定向标准输入流
    static void setOutunread(OutputStream out) 重定向标准输出流
            try {
                PrintStream ps = new PrintStream(new FileOutputStream("test.txt"));
                System.setOut(ps);
                Scanner sc = new Scanner(System.in);
                System.out.println(sc.next());
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    

    6. RandomAccessFile

    • RandomAccessFile是Java输入/输出体系中功能最丰富的文件内容访问类,可以读取文件/输出数据到文件
    • 支持“随机访问”的方式,跳转到文件的任意地方来读写数据
    方法名 作用
    long getFilePointer 返回当前的指针位置
    void seek(long pos) 将文件记录指针定位到pos位置
    read InputStream里的一样
    write OutputStream里的一样

    构造器:
    RandomAccessFile(String FileName, String mode)

    • mode: r, rw, rws, rwd

    6. 对象序列化

    相关文章

      网友评论

        本文标题:Java输入输出

        本文链接:https://www.haomeiwen.com/subject/njuonctx.html