Java提高篇(二):IO字节流、字符流和处理流

简介: 在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写。一.字节流下面是一个字节流的实例: 1 import java.io.*; 2 public class IO { 3 public static void main(String[] args) { 4 System.

在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写。

一.字节流

下面是一个字节流的实例:

 1 import java.io.*;
 2 public class IO {
 3     public static void main(String[] args) {
 4         System.out.println("现在利用Java的一个类读取一个数据已经定义好的数据");
 5         FileInputStream fis=null;//利用这个函数写进来的是字节型读入而非字符型
 6         FileOutputStream fos=null;//这个类是我们引入的IO包当中的类了,首先进行对象和引用变量的创建,后面使用了抛出异常的操作是为了让机器避免发生出错。
 7         try
 8         {
 9             fis=new FileInputStream("F:/我自己编写的代码库/JAVA/src/from.txt");//后面引入参数,说明读取的文件的绝对路径,绝对路径里面有中文都居然成功了。
10             fos =new FileOutputStream("F:/我自己编写的代码库/JAVA/src/fromto.txt");
11             byte buffer[]=new byte[100];//这里定义比特二进制的数组,证明了我们使用的是字节型流,而不是字符型,字符型利用了其它的定义
12             int temp=fis.read(buffer,0,100);//第一:输入进来的必须是比特数组流。第二:开始进行输入的比特序列号,如第一个,第二个。第三:输入流的比特长度
13             for (int i=0;i<=99;i++)
14             {
15                 System.out.println(buffer[i]);
16             }
17             fos.write(buffer,0,temp);//temp变量reveal了读入数据所接收到的字节的长度,这个正好是read函数的返回值
18         }
19         catch (Exception e)
20         {
21             System.out.println(e);//在改变了我们的读取数组长度之后,读取成功了,之前在for循环的地方越界了
22         }
23     }
24 
25 }

如果想读入一篇具有多个文字的文件的话,可以使用以下代码:

 1    import java.io.*;
 2 
 3 public class IO2 {
 4     public static void main(String[] args) {
 5         System.out.println("现在进行大型文件的读写");
 6         FileInputStream fis1=null;
 7         FileOutputStream fos1=null;
 8         try
 9         {
10            fis1=new FileInputStream("F:/我自己编写的代码库/JAVA/src/from1.txt");
11            fos1=new FileOutputStream("F:/我自己编写的代码库/JAVA/src/fromto1.txt");
12            byte buffer[]=new byte[1024];
13            while(true)
14            {
15                 int temp=fis1.read(buffer,0,buffer.length);//read方法返回的是每次读取文件的字节数(比如a的asc码等)
16                 if(temp==-1)//假设读到1024字节了,或者在1024字节之前就没有字节可读了,就会返回-1这个数值,然后跳出该循环,进行下一个循环
17                 {
18                     break;//这个程序在进行下一个循环的进入点在哪里呢?并没有提到,按道理来说是不会从刚刚已经读过的数据开始读,应该里面有一种自动读取的机制
19                 }
20                 fos1.write(buffer,0,buffer.length);
21            }
22         }
23         catch (Exception e)
24         {
25             System.out.println(e);
26         }
27         finally {
28             try{
29                 fis1.close();
30                 fos1.close();//在这里进行IO流的关闭,有开就有关,不然的话就会造成资源的浪费
31                 System.out.println("读写完毕");
32             }
33             catch (Exception e)
34             {
35                 System.out.println(e);
36             }
37         }
38     }}

 

注意前面创建对象的时候,我们创建的数组具有1024个字节,这是因为我们常常通过1024个字节进行读取,1024个字节正好等于了1个K,这样才可以对大文件当中的文字进行读写。最后我们在finally处,关闭了这个流,如果不关闭这个流的话,文件写入进去之后,是不会被保存下来的。

二.字符流

示例代码如下:

 

 1 mport java.io.*;
 2 public class IO3 {
 3     public static void main(String[] args) {
 4         System.out.println("现在开始字符流型程序的编写");
 5         FileReader fis2=null;
 6         FileWriter fos2=null;
 7         try {
 8             fis2=new FileReader("F:/我自己编写的代码库/JAVA/src/from2.txt");
 9             fos2=new FileWriter("F:/我自己编写的代码库/JAVA/src/fromto2.txt");
10             char buffer[]=new char[100];//字符流和字节流的区别就是这里,引入的对象buffer是字符型定义的是字符而不是二进制了。以及前面创建的两个对象分别是:   FileReader和FileWriter。这就是两个不同的区别,其它的完全相同。
11             int temp=fis2.read(buffer,0,buffer.length);
12             for(int i=0;i<=99;i++)
13             {
14                 System.out.println(buffer[i]);
15             }
16             fos2.write(buffer,0,buffer.length);
17             System.out.println("完成输入以及输出");
18         }
19         catch (Exception e)
20         {
21             System.out.println(e);
22         }
23         finally {
24             try{
25                 fis2.close();
26                 fos2.close();//只有关闭了输入输出流之后,输入进去的字节才会保存,不关闭的话,就仅仅会停留在内存当中不会保存的。这就是需要关闭的原因了。
27             }
28             catch (Exception e)
29             {
30                 System.out.println(e);
31             }
32         }
33     }
34 }

 

读取大型文件的代码只需要根据和字节流进行相似的处理就可以进行读取大型文件了。

三.处理流

实例代码如下:

 

 1 import java.io.*;
 2 public class IO4 {
 3     public static void main(String[] args) {
 4         System.out.println("现在开始处理流程序的书写\n");
 5         FileReader a=null;
 6         BufferedReader b=null;
 7         try
 8         {
 9             String line=null;
10             a=new FileReader("F:/我自己编写的代码库/JAVA/src/from2.txt");
11             b=new BufferedReader(a);
12             while(true)
13             {
14                 line=b.readLine();
15                 if(line==null)
16                 {
17                     break;
18                 }
19                 System.out.println(line);//这里打印出了我们读取文件的内容,至于里面的内容为什么会像像这样打印,明天再来讲解。
20             }
21         }
22         catch (Exception e)
23         {
24             System.out.println(e);
25         }
26     }
27 }

 

上述代码还是比较容易理解的。

 

目录
相关文章
|
2月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
18天前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
22 1
|
18天前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
44 1
|
1月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
47 10
|
2月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
33 2
|
2月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
2月前
|
缓存 Java
【IO面试题 一】、介绍一下Java中的IO流
Java中的IO流是对数据输入输出操作的抽象,分为输入流和输出流,字节流和字符流,节点流和处理流,提供了多种类支持不同数据源和操作,如文件流、数组流、管道流、字符串流、缓冲流、转换流、对象流、打印流、推回输入流和数据流等。
【IO面试题 一】、介绍一下Java中的IO流
|
5月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
2月前
|
存储 缓存 Java
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
48 3