Java-io(输入/输出)


首先如果我们在Java编写的一个程序中获得了想要的某种结果,那么在程序结束后,这个结果还存在嘛?不存在的,因为在Java程序运行时,程序会被加载到内存中在内存中运行,但是,在程序结束后虚拟机会自动释放内存空间,中间程序得到得结果也会消失,但是我们如果想保存这个结果呢?之前因为我们学习过使用JDBC技术链接数据库,这也能达到目的,但是对于某些长文本数据存储到数据库中就有些不便,那么这次我们学习Java的io技术可以将程序结果存储到本地的文件中,随取随存。


知识架构


输入流

Java中的输入流是一种用于从外部设备读取数据的机制。它提供了一组类和接口,用于从不同的数据源读取数据,如文件、网络连接、控制台等。

Java中的输入流主要分为以下几种类型:

字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括InputStream和OutputStream。
字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Reader和Writer。
缓冲流(Buffered Stream):缓冲流可以提高读写效率,减少对外部设备的访问次数。常见的缓冲流类包括BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。
数据流(Data Stream):数据流用于读写基本数据类型,如int、float、double等。常见的数据流类包括DataInputStream和DataOutputStream。
转换流(Conversion Stream):转换流可以将一种类型的流转换为另一种类型的流,例如InputStreamReader可以将字节流转换为字符流。
常规常见输入流步骤:

创建输入流对象:根据需要创建相应的输入流对象,例如使用FileInputStream类创建字节流对象读取文件,使用BufferedReader类创建字符流对象读取文本文件。
打开连接:打开与外部设备的连接,例如使用open()方法打开文件。
读取数据:通过输入流对象读取数据。在读取数据时,可以使用输入流提供的方法逐个读取字节或字符,也可以使用输入流的读取方法一次读取多个字节或字符。
关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。

输出流

Java中的输出流是一种用于将数据写入到外部设备的机制。它提供了一组类和接口,用于将数据从Java程序输出到不同的目标,如文件、网络连接、控制台等。

Java中的输出流主要分为以下几种类型:

字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括OutputStream和Writer。
字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。

使用输出流进行数据写入的一般步骤如下:

创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
写入数据:通过输出流对象将数据写入到外部设备。在写入数据时,可以使用输出流提供的方法逐个写入字节或字符,也可以使用输出流的写入方法一次写入多个字节或字符。
关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。
需要注意的是: 在使用输入输出流进行数据读取时,应该遵循“打开-使用-关闭”的原则,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。


File类

Java中的File类是用于文件和目录操作的类。它提供了一种在Java程序中创建、读取、写入和删除文件的方式。
File类主要用于对文件增删查的操作,没有用于对文件内部数据的读写功能。

File类的主要功能包括:

创建文件或目录:可以使用File类的构造函数创建一个新的文件或目录。例如,File file = new File(“path/to/file.txt”)将创建一个名为file.txt的文件。如果文件已经存在,则不会创建新文件。
判断文件或目录是否存在:可以使用File类的exists()方法来判断文件或目录是否存在。如果文件或目录存在,则返回true,否则返回false。
获取文件或目录的属性:可以使用File类的各种方法获取文件或目录的属性,如文件名、文件大小、文件创建时间等。例如,getName()方法返回文件或目录的名称,length()方法返回文件的大小(以字节为单位),lastModified()方法返回文件最后修改的时间。
删除文件或目录:可以使用File类的delete()方法删除文件或目录。如果删除成功,则返回true,否则返回false。需要注意的是,如果文件或目录不存在,或者由于其他原因无法删除,则删除操作可能会失败。
获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
获取文件或目录的名称:可以使用File类的getName()方法获取文件或目录的名称。例如,如果文件位于C:\Users\username\Documents\file.txt,则文件名将是file.txt。
创建文件夹:可以使用 mkdir() 或 mkdirs() 方法创建文件夹。 mkdir() 只创建最后一个不存在的父目录,而 mkdirs() 会创建所有不存在的父目录。
判断是否是文件:可以使用 isFile() 方法判断路径是否对应一个普通文件。如果是,返回 true;否则返回 false。
判断是否是目录:可以使用 isDirectory() 方法判断路径是否对应一个目录。如果是,返回 true;否则返回 false。
其他操作:File类还提供了一些其他的方法,如listFiles()方法返回一个包含指定目录下所有文件的数组,list()方法返回一个包含指定目录下所有文件和子目录的字符串数组等。
示例:输出某一文件夹中所有的文件信息(包括子文件夹):
需要注意的是,如果某个文件夹需要权限才能访问,那么使用File类的listFiles方法返回的是null,为了代码不出现错误,我们需要对此进行判断。

public static void main(String[] args) {
        out_data(new File("E:\\简历"));
    }
public static void out_data(File f){
    //获取文件名或文件夹名
    System.out.println("--------------"+f.getName()+"------------------");
    File[] files = f.listFiles();
    if(files == null) { return; }
    for(File ft : files){
        // 判断是否文件夹,是则继续往下递归
        if(ft.isDirectory()) { out_data(ft); }
        // 不是文件夹,则输出信息
        else{ System.out.println(ft.getName()); }
    }
    System.out.println("--------------"+f.getName()+"------------------");
}


运行结果

文件输入 / 输出流

Java中的文件输入输出流是用于读取和写入文件的类。Java提供了两种类型的文件输入输出流:字节输入输出流和字符输入输出流。
二者的区别在于,字节流是以字节为单位进行读取,随读随取,可以读取除文本外任意文件;字符流也是以字节进行读取,但是不同点在于它遇到中文时会按中文的编码方式进行读取,而带有缓冲区机制。

字节输入输出流
字节输入输出流以字节为单位进行读写操作。Java中提供了以下几种字节输入输出流类:

FileInputStream:用于从文件中读取字节数据。
FileOutputStream:用于向文件中写入字节数据。
BufferedInputStream:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
BufferedOutputStream:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
DataInputStream:用于从文件中读取基本数据类型,如int、float、double等。
DataOutputStream:用于向文件中写入基本数据类型,如int、float、double等。

使用字节输入输出流进行文件读写的一般步骤如下:

创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileInputStream类创建文件输入流对象,使用FileOutputStream类创建文件输出流对象。
打开连接:使用open()方法打开文件,建立与文件的连接。
读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字节数据,使用write()方法向输出流中写入字节数据。
关闭连接:使用close()方法关闭文件,断开与文件的连接。

示例:读取文件

import java.io.FileInputStream;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileInputStream fileInputStream = new FileInputStream("path/to/file.txt")) {  
            int data;  
            while ((data = fileInputStream.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  


}
示例:写入文件

import java.io.FileOutputStream;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileOutputStream fileOutputStream = new FileOutputStream("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileOutputStream.write(data.getBytes());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}

字符输入输出流
字符输入输出流以字符为单位进行读写操作。

Java中提供了以下几种字符输入输出流类:

FileReader:用于从文件中读取字符数据。
FileWriter:用于向文件中写入字符数据。
BufferedReader:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。

使用字符输入输出流进行文件读写的一般步骤如下:

创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileReader类创建文件输入流对象,使用FileWriter类创建文件输出流对象。
打开连接:使用open()方法打开文件,建立与文件的连接。
读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字符数据,使用write()方法向输出流中写入字符数据。
关闭连接:使用close()方法关闭文件,断开与文件的连接。

示例:读取文件

import java.io.FileReader;  
import java.io.IOException;  
  
public class FileReadingExample {  
    public static void main(String[] args) {  
        try (FileReader fileReader = new FileReader("path/to/file.txt")) {  
            int data;  
            while ((data = fileReader.read()) != -1) {  
                System.out.print((char) data);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  


}
 

示例:写入文件

import java.io.FileWriter;  
import java.io.IOException;  
  
public class FileWritingExample {  
    public static void main(String[] args) {  
        try (FileWriter fileWriter = new FileWriter("path/to/file.txt")) {  
            String data = "Hello, World!";  
            fileWriter.write(data);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值