IO输入流 1----从指定的文件中读取数据到项目中

2 篇文章 0 订阅

/*
* **一.流的分类:
*    1.按照操作数据分:字节流byte,字符流char
*    2.按照数据流向:  输入流inputStream,输出流outputStream
*    3.流的角色:     节点流,和处理流:
*
* 二.流的体系结构
*   抽象基类                 节点流(或文件流)                       缓冲流(处理流的一种)
*   InputStream              FileInputStream (io字节)              BufferedInputStream
*   OutputStream             FileOutPutStream (io字节)             BufferedOutputStream
*   Reader                   FileReader (字符)                     BufferedReader
*   Writer                   FileWriter (字符)                     BufferedWriter
***
*
* */

将文件内容读入到程序中,并且打印输出到控制台

步骤

1.实例化File对象,指明要操作的文件
2.提供具体的流
3.数据的读取
4.关闭流

1.方法一

//为了保证流资源一定会关闭,所以要是用try-cath-finally
  FileReader fileReader = null;
        try {
            //1.实例化File对象,指明要操作的文件
            //(此处用的是绝对路径,我们也可以采用相对路径,是相对于该项目的,例如: File file = new File("file.txt");)
            File file = new File("D:\\IDEA_Project\\CodeGenerator\\src\\main\\resources\\file\\file.txt");          
            //实例化完file对象之后,千万别忘记创建file真是的文件,这样file才真是存在!
            //如果没有创建则会报错:
            //Exception in thread "main" java.io.FileNotFoundException: hello.txt (系统找不到指定的文件。)
             file.createNewFile();
            System.out.println(file.getAbsolutePath());//绝对路径
            //2.提供具体的流,把指定的文件处理成节点流的形式在读入到项目中
            fileReader = new FileReader(file);
             //执行到这里,我们就可以看到项目中创建的新文件了,我们下面对数据进行读取
             //因为我们是刚刚创建的文件,没有内容,所以请手动添加信息,方便下面测试
           
            //3.数据的读取
            //read()返回读入的字符,如果达到文件尾部,返回-1
            //我们读取的字符是char类型,例如:在内存中a代表97
            int read = fileReader.read();
            while (read != -1) {
                System.out.print((char) read);//强转成字符(char类型)
                 read = fileReader.read();//继续读取下一个字符
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader!=null) {
                try {
                    fileReader.close();//关闭流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

2.方式二.改造加强方法一

主要修改是步骤三(改造原因:方法一的缺点,每次读取一个字符,输出一个字符,需要进行多次的交互,效率太低,方法二采用一次多读取几个字符,放在数组中再输出,输出完之后再去进行交互,这样减少了交互的次数,效率会有提升)

//3.数据的读取
            char[] charBuffers = new char[5];//每次会读取5个(可以自定义读取的个数,本例已5为例)
             //read(charBuffers)返回每次读入charBuffers数组中字符的个数,如果达到文件尾部,返回-1
            int len;//记录每次读取新元素的个数
            while ((len=fileReader.read(charBuffers)) != -1) {//循环完之后再继续读取字节流中的字符,知道全部读取完,循环停止
                for (int i = 0; i < len; i++) {
                //***为什么要i<len而不是i<charBuffers.length?
                //因为:数组每次往里面添加数据,是对数组之前里的元素进行覆盖
                //假设最后一次,我们读取了三个字符,而我们的数组里还存在上一次读取的五个字符
                //我们开始往数组里添加这次的新数据,前三个覆盖完毕,后面两个还是原本的数组,没有字符覆盖
                //这样我们的输出就会产生对于的错误数据!
                    System.out.print(charBuffers[i]);
                }
            }
 @Test
    void contextLoads() throws IOException {
        FileReader fileReader = null;
        try {
            //1.实例化File对象,指明要操作的文件
            File file = new File("D:\\IDEA_Project\\CodeGenerator\\src\\main\\resources\\file\\file.txt");
            file.createNewFile();
            System.out.println(file.getAbsolutePath());//绝对路径
            //2.提供具体的节点流
            fileReader = new FileReader(file);
            //3.数据的读取
            //read(charBuffers)返回每次读入charBuffers数组中字符的个数,如果达到文件尾部,返回-1
            char[] charBuffers = new char[5];//每次会读取5个
            int len;
            while ((len=fileReader.read(charBuffers)) != -1) {
                for (int i = 0; i < len; i++) {
                    System.out.println(charBuffers[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader!=null) {
                try {
                    fileReader.close();//关闭流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 首先,我们需要创建一个File对象来表示我们要写入数据的文件。然后,我们可以使用FileOutputStream类来创建一个输出,将数据写入文件。以下是示例代码: ``` import java.io.*; public class WriteToFile { public static void main(String[] args) { File file = new File("data.txt"); try { FileOutputStream fos = new FileOutputStream(file); for (int i = 1; i <= 10; i++) { fos.write(i); } fos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码,我们使用了一个for循环来写入数字1到10。每次循环,我们使用write()方法将一个数字写入文件。最后,我们关闭输出。 接下来,我们需要读取文件的数据。我们可以使用FileInputStream类来创建一个输入,从文件读取数据。以下是示例代码: ``` import java.io.*; public class ReadFromFile { public static void main(String[] args) { File file = new File("data.txt"); try { FileInputStream fis = new FileInputStream(file); int data; while ((data = fis.read()) != -1) { System.out.print(data + " "); } fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码,我们使用了一个while循环来读取文件的数据。每次循环,我们使用read()方法读取一个字节的数据,并将其存储在变量data。如果读取到文件末尾,read()方法将返回-1,循环将结束。最后,我们关闭输入。 通过以上代码,我们可以实现向文件写入数字并读取的功能。 ### 回答2: 数据I/O是Java输入和输出信息的重要工具,它可以被用来读写文件,网络连接和其他数据源和目标。向文件写入数字并读取,是数据I/O最基本的应用之一。以下是学习数据I/O之向文件写入数字并读取的几个主要步骤: 1. 创建文件。在Java程序文件的创建可以用File类的构造函数来完成。在调用File类的构造函数时,需要给定文件名和文件路径。例如,我们可以使用以下代码来创建一个名为“numbers.txt”的新文件: File file = new File("numbers.txt"); 2. 向文件写入数字。在Java程序,数据I/O的写入操作通常使用OutputStream类及其子类来完成。例如,我们可以使用以下代码向文件写入数字: try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file))) { dos.writeInt(10); dos.writeInt(20); dos.writeInt(30); } catch (IOException e) { e.printStackTrace(); } 在上述代码,我们使用了DataOutputStream类来将整数值写入文件。DataOutputStream类是OutputStream类的子类,可以将Java的基本数据类型转化为字节并写入到文件。 3. 从文件读取数字。在Java程序,数据I/O的读取操作通常使用InputStream类及其子类来完成。例如,我们可以使用以下代码从文件读取数字: try (DataInputStream dis = new DataInputStream(new FileInputStream(file))) { int firstNum = dis.readInt(); int secondNum = dis.readInt(); int thirdNum = dis.readInt(); System.out.println("The numbers in the file are " + firstNum + ", " + secondNum + ", " + thirdNum); } catch (IOException e) { e.printStackTrace(); } 在上述代码,我们使用了DataInputStream类来从文件按顺序读取整数值。DataInputStream类是InputStream类的子类,可以将字节转化为Java的基本数据类型。 总之,学习数据I/O之向文件写入数字并读取是Java编程的必要基础。掌握这一基本技能可以让我们更加容易地处理文件和其他数据源,并为更高级的应用打下坚实的基础。 ### 回答3: Java输入输出(IO)是Java非常重要的一个概念,在Java我们通常使用来进行数据的读取和写入操作。数据IO就是的一种,用来在程序和文件之间传输数据。简单的说,就是 Java程序通过数据IO文件写数据,在需要的时候从文件读取数据输入(Input Stream) 和 输出(Output Stream) 是Java IO的两个重要的类,它们提供了从文件读取数据和向文件写入数据的功能。在学习数据IO之前,需要了解一下Java文件类:File类。 File类用于描述文件或者目录,它的构造方法可以传入文件的路径或者文件句柄。File类提供了很多方法用于操作文件,比如:判断该文件是否存在(isExist),获取文件名(getName),获取文件路径(getPath)等等。 下面是向文件写入数字并读取的示例代码: // 在文件写入数字 FileOutputStream fos = new FileOutputStream("temp.txt"); for(int i=0;i<5;i++){ fos.write(i); } fos.close(); // 从文件读取数字 FileInputStream fis = new FileInputStream("temp.txt"); int i; while((i = fis.read()) != -1){ System.out.println(i); } fis.close(); 上述代码,首先我们创建了一个名为“temp.txt”的文件,在该文件写入了5个数字。然后我们使用FileInputStream从该文件读取数字,读取到-1标志文件读取结束。在读取过程,我们使用了一个while循环和一个用于读取每个字节的变量i。最后,程序输出了读取到的所有数字。 需要注意的是,在读取文件时,我们需要先判断是否已经读到了文件的结束,也就是判断读取到的字节数是否为-1。这是因为在Java,EOF(文件结束标志)被定义为-1。 总之,Java的输入输出(IO)是编程非常重要的一部分,掌握好它对编程会非常有帮助。对于使用Java-IO进行文件读写操作,建议大家多进行练习,深入了解其使用方法,以便更好的掌握Java编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzhSWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值