自学内容网 自学内容网

java中的I/O(8个案例+代码+效果图)

目录

1.File类

1)常用构造方法

1)File(String pathname)

2)File(String parent, String child)

3)File(File parent, String child)

2)常用方法

1)boolean canRead()

2)boolean canWrite()

3)boolean createNewFile() throws IOException

4)boolean delete()

5)boolean exists()

6)String getName()

7)String getPath()

8)boolean isDirectory()

9)boolean isFile()

10)long length()

11)String[] list()

12)File[] listFiles()

13)boolean mkdir()

14)boolean renameTo(File dest)

3)案例:File类的简单使用

1.代码

2.效果

4)遍历目录下的文件

1.代码

2.效果

5)遍历遍历文件以及文件夹下的所有文件

1.代码

2.效果

2.字节流

1)InputStream

1)int read()

2)int read(byte[] b)

3)void close()

2)OutputStream

1)void write(int b)

2)void write(byte[] b)

3)void flush()

4)void close()

3)案例:文件读取

1.代码

2.效果

 4)案例:文件写入

1.代码

2.效果

5)案例:文件的复制

1.代码

2.效果​编辑

3.字符流

Reader

1)int read()

2)int read(char[] cbuf)

3)void close()

Writer

1)void write(int c)

2)void write(char[] cbuf)

3)void write(String str)

4)void flush()

5)void close()

6)案例:字符流的读取

1.代码

2.效果

​编辑 7)案例:简易记事本

1.代码

2.效果


1.File类

1)常用构造方法

  1. 1)File(String pathname)

    • 通过将给定的路径名字符串转换为抽象路径名来创建一个新的 File 实例
    • 参数:pathname - 一个路径名字符串。
  2. 2)File(String parent, String child)

    • 根据父路径名字符串和子路径名字符串创建一个新的 File 实例。
    • 参数:
      • parent - 父路径名字符串。
      • child - 子路径名字符串。
  3. 3)File(File parent, String child)

    • 根据父抽象路径名和子路径名字符串创建一个新的 File 实例。
    • 参数:
      • parent - 抽象路径名作为此路径名的前缀。
      • child - 字符串作为此路径名的更多名称。

2)常用方法

  1. 1)boolean canRead()

    • 测试应用程序是否可以读取该文件
    • 返回值:如果文件可读,则返回 true
  2. 2)boolean canWrite()

    • 测试应用程序是否可以修改该文件
    • 返回值:如果文件可写,则返回 true
  3. 3)boolean createNewFile() throws IOException

    • 当且仅当不存在具有此抽象路径名指定名称的文件时,原子地创建一个由该抽象路径名命名的新空文件。
    • 返回值:如果操作成功则返回 true;如果已经存在这样的文件,则返回 false
    • 异常:可能抛出 IOException
  4. 4)boolean delete()

    • 删除由此抽象路径名表示的文件或目录
    • 返回值:如果成功删除了文件或目录,则返回 true;否则返回 false
  5. 5)boolean exists()

    • 测试此抽象路径名表示的文件或目录是否存在
    • 返回值:如果文件或目录存在,则返回 true
  6. 6)String getName()

    • 返回由此抽象路径名表示的文件或目录的名称
    • 返回值:此抽象路径名表示的文件或目录的名称。
  7. 7)String getPath()

    • 将此抽象路径名转换为路径名字符串
    • 返回值:表示此抽象路径名的路径名字符串。
  8. 8)boolean isDirectory()

    • 测试此抽象路径名表示的文件是否是一个目录
    • 返回值:如果此抽象路径名表示的文件是一个目录,则返回 true
  9. 9)boolean isFile()

    • 测试此抽象路径名表示的文件是否是一个标准文件
    • 返回值:如果此抽象路径名表示的文件是一个标准文件,则返回 true
  10. 10)long length()

    • 返回由此抽象路径名表示的文件的长度
    • 返回值:此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则返回 0L
  11. 11)String[] list()

    • 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
    • 返回值:指定目录中文件和目录名称的字符串数组,如果此抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null
  12. 12)File[] listFiles()

    • 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
    • 返回值:表示目录中文件的抽象路径名数组,如果此抽象路径名不表示一个目录,或者发生了 I/O 错误,则返回 null
  13. 13)boolean mkdir()

    • 创建由此抽象路径名命名的目录
    • 返回值:如果已成功创建目录,则返回 true;如果由于父路径不存在等原因而无法创建目录,则返回 false
  14. 14)boolean renameTo(File dest)

    • 重新命名此抽象路径名表示的文件
    • 参数:dest - 新的抽象路径名。
    • 返回值:如果重命名成功,则返回 true;否则返回 false

3)案例:File类的简单使用

1.代码

package org.xiji.javaio;

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

public class FileOne {
    public static void main(String[] args) throws IOException {
        //创建一个文件对象
        File file = new File("D:\\myFirst\\myTxt.txt");

        System.out.println("文件是否存在:"+file.exists());
        //创建这个是创建的目录
        File file1 = new File("D:\\myFirst");
        file1.mkdir();
        System.out.println("文件是否存在:"+file.exists());

        //创建文件
        boolean newFile = file.createNewFile();
        System.out.println("文件是否创建成功:"+newFile);

        System.out.println("文件是否是绝对路径:"+file.isAbsolute());
        System.out.println("文件是否是目录:"+file.isDirectory());
        System.out.println("文件是否是文件:"+file.isFile());
        System.out.println("文件是否可读:"+file.canRead());
        System.out.println("文件是否可写:"+file.canWrite());
        System.out.println("文件是否隐藏:"+file.isHidden());
        System.out.println("文件大小:"+file.length());
        System.out.println("文件最后修改时间:"+file.lastModified());
        System.out.println("文件名:"+file.getName());
        System.out.println("文件路径:"+file.getPath());
        System.out.println("文件绝对路径:"+file.getAbsolutePath());
        System.out.println("文件父路径:"+file.getParent());
        System.out.println("文件是否是临时文件:"+file.isHidden());

    }
}

2.效果

4)遍历目录下的文件

1.代码
package org.xiji.javaio;

import java.io.File;

public class FileFor {

    public static void main(String[] args) {
        //遍历某个文件夹下的文件
        String path = "D:\\myFirst";

        File file = new File(path);

        File[] files = file.listFiles();

        for (File file1 : files) {
            System.out.println(file1.getName());
        }
    }
}

2.效果

5)遍历遍历文件以及文件夹下的所有文件

1.代码
package org.xiji.javaio;

import java.io.File;

public class FileForTwo {

    public static void main(String[] args)
    {
        //递归遍历
        String path = "D:\\myFirst";
        File file = new File(path);

        myListFiles(file);




    }

    //文件递归遍历
    public static void myListFiles(File file)
    {
        File[] files = file.listFiles();
        //判断文件是否为空
        if(files == null)
        {
            return;
        }
        //遍历
        for (File file1 : files) {
            //判断是否为文件夹,是文件夹就继续遍历,不是就输出名字
            if(file1.isDirectory())
            {
                myListFiles(file1);
            }

            System.out.println(file1.getName());

        }
    }
}

2.效果

2.字节流

字节流用于读写二进制数据。Java中的字节流主要基于InputStreamOutputStream抽象类。

  • 1)InputStream

  • 这是所有字节输入流的超类。它定义了从源读取数据的基本方法。

    • 1)int read()

    • 从输入流中读取下一个字节的数据。返回值范围是0到255。如果已经到达流的末尾,则返回-1。
    • 2)int read(byte[] b)

    • 尝试从流中读取一定数量的字节,并将其存储在参数b指定的缓冲区中。返回实际读取的字节数;如果到达流的末尾,则返回-1。
    • 3)void close()

    • 关闭该流并释放与之关联的所有系统资源。
  • 2)OutputStream

  • 这是所有字节输出流的超类。它定义了将数据写入目标的基本方法。

    • 1)void write(int b)

    • 将指定的字节写入此输出流。
    • 2)void write(byte[] b)

    • 将b.length个字节从指定的字节数组写入此输出流。
    • 3)void flush()

    • 刷新该流的缓冲区。
    • 4)void close()

    • 关闭此输出流并释放与此流相关的任何系统资源。

具体实现类如FileInputStreamFileOutputStream等提供了文件相关的读写功能。

3)案例:文件读取

1.代码
package org.xiji.javaio;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInput {
    public static void main(String[] args) throws IOException {

        //读取文件
        String path = "D:\\myFirst\\myTxt.txt";

        //文件读取流
        FileInputStream fis = new FileInputStream(path);
        int readInfo = 0;

        //读取文件
        while (true) {

            readInfo = fis.read();
            if (readInfo == -1) {
                break;
            }
            System.out.println(readInfo);

        }
        System.out.println("可以看到读取的内容是一些数组,不是文件中的字符串");
    }
}

2.效果

 4)案例:文件写入

1.代码
package org.xiji.javaio;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutPut {
    public static void main(String[] args) throws IOException {

        String containInfo = "这是我通过这些输入到文件中的内容";
        FileOutputStream myOutputStream = new FileOutputStream("D:\\myFirst\\myOutputStream.txt");

        try {
            //转化为数组并且写入
            myOutputStream.write(containInfo.getBytes());

            System.out.println("写入完成");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            myOutputStream.close();
        }

    }
}

2.效果

5)案例:文件的复制

1.代码
package org.xiji.javaio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MyCopy {
    public static void main(String[] args) throws IOException {
        System.out.println("文件的复制");

        //文件读取流
        FileInputStream fileInputStream = new FileInputStream("D:\\myFirst\\myTxt.txt");


        //文件输出流
        FileOutputStream fileOutput = new FileOutputStream("D:\\myFirst\\myTxtCopy.txt");

        //缓冲变量
        int len = 0;

        //定义每次读取长度1024

        byte[] bytes = new byte[1024];
        while ( (len =fileInputStream.read(bytes)) !=  -1 ) {

            //文件读取
            fileOutput.write(bytes,0,len);
        }
        fileInputStream.close();
        System.out.println("复制完成");
    }
}

2.效果

 

3.字符流

字符流用于读写字符文本。它们以Unicode编码形式处理数据。Java中的字符流主要基于ReaderWriter抽象类。

  • Reader

  • 这是所有字符输入流的超类。

    • 1)int read()

    • 读取单个字符。
    • 2)int read(char[] cbuf)

    • 尝试读取多个字符并将它们存放到数组cbuf中。
    • 3)void close()

    • 关闭流。
  • Writer

  • 这是所有字符输出流的超类。

    • 1)void write(int c)

    • 写入单个字符。
    • 2)void write(char[] cbuf)

    • 写入一个字符数组。
    • 3)void write(String str)

    • 写入一个字符串。
    • 4)void flush()

    • 刷新流。
    • 5)void close()

    • 关闭流。

具体实现类如FileReaderFileWriter等提供了文件相关的读写功能。

6)案例:字符流的读取

1.代码

package org.xiji.javaio;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class MyReaderFile {
    public static void main(String[] args) throws IOException {
        //文件字符读取流
        FileReader fr = new FileReader("D:\\myFirst\\myTxt.txt");

        int read = 0;
        
        //文件读取
        while (true) {

            read = fr.read();
            if (read == -1) {
                break;
            }
            System.out.println((char) read);

        }
    }
}

2.效果

可以看到每次读取的都是一个字符,而不是像FileInputStream读取的一样是乱码        

 7)案例:简易记事本

1.代码
package org.xiji.javaio;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class MyNotePad {
    public static void main(String[] args) throws IOException {

        // 文件路径
        String path = "D:\\myFirst\\";

        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("输入1继续添加内容");
            System.out.println("输入2退出");

            if (sc.nextInt() == 2) {
                break;
            }
            System.out.println("输入记事本名字:");
            String myTxtName = sc.next();


            FileWriter fw = new FileWriter(path+myTxtName+".txt");
            //文件内容
            System.out.println("输入记事本内容:");
            String myContain = sc.next();
            fw.write(myContain);

            fw.close();
        }
    }
}

2.效果


原文地址:https://blog.csdn.net/2301_76862031/article/details/142798639

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!