首页 > 编程语言 >肖sir__Java IO流___17

肖sir__Java IO流___17

时间:2022-10-01 11:23:18浏览次数:47  
标签:__ sir Java 字节 文件 File 字符 new 输入

Java IO流 1.1 流概念 在Java中所有数据都是使用流读写的。数据流的处理只能按照数据序列的顺序来进行,即前一个数据处理完之后才能处理后一个数据。 数据流以输入流的形式被程序获取,再以输出流的形式将数据输出到其它设备。 根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种。   什么是输入/输出流? 输入流就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出流则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备   1.2 流概念 Java中I/O的分类: 1,按照流的方向主要分为输入流和输出流两大类。 2,数据流按照数据单位的不同分为字节流和字符流。 3,按照功能可以划分为节点流和处理流。

 

 

 

 

1.3 流概念 输入流:Java流相关的类都封装在 java.io 包中,而且每个数据流都是一个对象。所有输入流类都是 InputStream 抽象类(字节输入流)和 Reader 抽象类(字符输入流)的子类.

 

 

1.4 流概念 输出流:在 Java 中所有输出流类都是 OutputStream 抽象类(字节输出流)和Writer 抽象类(字符输出流)的子类。  

 

 

1.5 流概念 输入流和输出流的类结构图

 

 

2.1 File类 在Java 中File类是 java.io 包中唯一代表磁盘文件本身的对象,可以通过 File类中定 义的方法来操作文件,如新建、删除、重命名文件和目录等。 File 类三种构造方法: File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如 果 path 是文件名,则该 File 对象表示的是文件。 File(String path, String name):path 是路径名,name 是文件名。 File(File dir, String name):dir 是路径对象,name 是文件名。 File 类中常用常量:public static final String separator:用来分隔同一个路径字符 串中的目录的,Windows 下指/。例如 C:/Program Files/Common Files

 

 

2.3 File类 使用File类获取文件属性: String path = "C:/windows/"; // 指定文件所在的目录 File f = new File(path, "notepad.exe"); // 建立File变量,并设定由f变量引用 System.out.println("文件长度:" + f.length() + "字节"); System.out.println("文件或者目录:" + (f.isFile() ? "是文件" : "不是文件")); System.out.println("文件或者目录:" + (f.isDirectory() ? "是目录" : "不是目录")); System.out.println("是否可读:" + (f.canRead() ? "可读取" : "不可读取")); System.out.println("是否可写:" + (f.canWrite() ? "可写入" : "不可写入")); System.out.println(“是否隐藏:” + (f.isHidden() ? “隐藏文件” : “非隐藏文件")); System.out.println("文件名称:" + f.getName()); System.out.println("文件路径:" + f.getPath()); 说明:Windows的路径分隔符使用反斜线“ \”,而 Java 程序中的反斜线表示转义字符,所以在Java 中表示Windows下的路径,则应该使用两条反斜线或直接使用斜线“/” 或使用Java中的常量separator   2.4 File类 使用File创建和删除文件: 1,假设要在 C 盘上创建一个 test.txt 文件,程序启动时会检测该文件是否存在,如 果不存在则创建;如果存在则删除它再创建。例如: // 拼接出可以适应操作系统的路径 String path = "C:" + File.separator + "test.txt"; // 创建指向文件的File对象 File f = new File(path); // 判断文件是否存在 if (f.exists()) { // 存在则先删除 f.delete(); } f.createNewFile(); // 再创建 注意:在操作文件时一定要使用 File.separator 表示分隔符。在程序的开发中,往往会使用 Windows 开发环境, 因为在 Windows 操作系统中支持的开发工具较多,而在程序发布时往往是直接在 Linux 或其它操作系统上部署, 所以这时如果不使用 File.separator,则程序运行就有可能存在问题   2.5 File类 使用File创建和删除目录: 1,编写程序判断 C 盘根目录下是否存在 config 目录,如果存在则先删除再创建。 例如: // 拼接出可以适应操作系统的路径 String path = "C: " + File.separator + "config"; // 创建File对象 File f = new File(path); // 判断是否存在 if (f.exists()) { f.delete(); } f.mkdir(); // 创建目录 2.6 File类 File 类的 list() 方法提供了遍历目录功能,该方法有如下两种重载形式。 1. String[] list() 该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null。 2. String[] list(FilenameFilter filter) 该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter 过滤器的文件和目录,如果 filter 为 null,则读取全部文件和目录。 说明:当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。   2.7 File类 File 类的 list() 方法提供了遍历目录功能,例如: String fileList[] = f.list(); // 调用不带参数的list()方法 for (int i = 0; i < fileList.length; i++) { // 遍历返回的字符数组 System.out.print(fileList[i] + "\t\t"); System.out.print((new File("C:/", fileList[i])).isFile() ? "文件" + "\t\t" : "文件夹" + "\t\t"); System.out.println((new File("C:/", fileList[i])).length() + "字节"); } 假设希望只列出目录下的某些文件,这就需要调用带过滤器参数的 list() 方法。首先需要创建文件过滤器,该过滤器必须实现 java.io.FilenameFilter 接口,并在 accept() 方法中指定允许的文件类型。 public class ImageFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { return name.endsWith(".jpg"); // 指定允许的文件类型 } } // 使用文件过滤器: String fileList[] = f.list(new ImageFilter()); 2.7 File类 FileInputStream文件输入流: 该流用于从文件读取数据,它的对象可以用关键字 new 来创建。 有多种构造方法可用来创建对象。 可以使用字符串类型的文件名来创建一个输入流对象来读取文件: InputStream f = new FileInputStream("C:/java/hello"); 也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File()方法来创建一个文件对象: File f = new File("C:/java/hello"); InputStream out = new FileInputStream(f);   2.8 File类 FileInputStream文件输入流常用方法:

 

 

2.8 File类 FileOutputStream文件输出流: 该类用来创建一个文件并向文件中写数据。 如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。 有两个构造方法可以用来创建 FileOutputStream 对象。 使用字符串类型的文件名来创建一个输出流对象: OutputStream f = new FileOutputStream("C:/java/hello") 也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象: File f = new File("C:/java/hello"); OutputStream f = new FileOutputStream(f); 2.9 File类 FileOutputStream文件输出流常用方法

 

 

3.1 字节流 字节输入流: InputStream类及其子类的对象表示字节输入流,InputStream常用子类: ByteArrayInputStream 类:将字节数组转换为字节输入流,从中读取字节。 FileInputStream 类:从文件中读取数据。 PipedInputStream 类:连接到一个 PipedOutputStream(管道输出流)。 SequenceInputStream 类:将多个字节输入流串联成一个字节输入流。 ObjectInputStream 类:将对象反序列化。   3.2 字节流 字节输出流 OutputStream 类及其子类的对象表示一个字节输出流。OutputStream 常用子类: ByteArrayOutputStream 类:向内存缓冲区的字节数组中写数据。 FileOutputStream 类:向文件中写数据。 PipedOutputStream 类:连接到一个 PipedlntputStream(管道输入流)。 ObjectOutputStream 类:将对象序列化。   4.1 字符流 字符输入流 Reader 类的常用子类如下: CharArrayReader 类:将字符数组转换为字符输入流,从中读取字符。 StringReader 类:将字符串转换为字符输入流,从中读取字符。 BufferedReader 类:为其他字符输入流提供读缓冲区。 PipedReader 类:连接到一个 PipedWriter。 InputStreamReader 类:将字节输入流转换为字符输入流,可以指定字符编码 4.2 字符流 字符输出流 Writer 类的常用子类如下。 CharArrayWriter 类:向内存缓冲区的字符数组写数据。 StringWriter 类:向内存缓冲区的字符串(StringBuffer)写数据。 BufferedWriter 类:为其他字符输出流提供写缓冲区。 PipedWriter 类:连接到一个 PipedReader。 OutputStreamReader 类:将字节输出流转换为字符输出流,可以指定字符编码。   5.1 转换流 InputStreamReader 用于将字节输入流转换为字符输入流,其中 OutputStreamWriter 用于将字节输出流转换为字符输出流。使用转换流可以在一定 程度上避免乱码,还可以指定输入输出所使用的字符集。 例如: FileInputStream fis = new FileInputStream("D://java.txt"); InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); BufferedReader br = new BufferedReader(isr); // true表示追加内容,false表示覆盖内容 FileOutputStream fos = new FileOutputStream(("D://java.txt", true); //使用转换流解决写入中文字符时中文乱码问题,(UTF-8 文件编码格式) OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); BufferedWriter bw = new BufferedWriter(osw); 课后练习题 1,每到学校开学季都会新进一批图书教材,需要将这些图书信息保存到文件,再将 它们打印出来方便老师查看。下面编写程序,使用文件输入/输出流完成图书信息的 存储和读取功能,使用控制台输入图书信息。 2,设计开发一个学生管理系统,学生有姓名,年龄,性别,学号。 A,可以通过控制台来录入学生的姓名,年龄,学号信息。 B,可以通过查询所有学生信息在控制台进行展示。 C,可以根据姓名和学号查询某个学生信息。 D,可以修改某个学生信息 E,可以删除某个学生信息 F,把学生信息存储到文件中进行持久化    

标签:__,sir,Java,字节,文件,File,字符,new,输入
From: https://www.cnblogs.com/xiaolehong/p/16746939.html

相关文章

  • python题集
    生成全排列n=0vis=[0foriinrange(100)]ans=[0foriinrange(100)]defwork(cnt):ifcnt==n:foriinrange(n):print(ans[i......
  • mxmp过程中遇到的问题
    去除标题的方法:在配置文件中设置,"window":{“navigationStyle":"custom"} 向后端请求数据:1.app.js中初始化wx.cloud.init()2.调用数据库wx.cloud.database().coll......
  • 函数式编程(纯函数、避免改变参数值和全局变量)、使用.map()、.filter()使代码更简洁
    函数式编程是:独立函数——不依赖于程序(里面含有可能更改的全局变量)的状态。纯函数——相同的输入总是产生相同的输出,不产生副作用(不更改参数值和全局变量值)。副作用尽量小......
  • Linux实用指令1
    Linux实用指令指定运行级别基本介绍0关机1单用户找回丢失密码2多用户状态没有网络服务3多用户状态有网络服务4系统未使用保留给用户5图形界面6系统重启......
  • 链表-2. 两数相加
    之前没有做过链表,这题我一提交就报错,后面发现需要用链表这种数据结构返回在网上查了下链表的概念,做完了它给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按......
  • flask基础知识
    1、flask微服务含义“微”并不代表整个应用只能塞在一个Python文件内,当然塞在单一文件内也没有问题。“微”也不代表Flask功能不强。微框架中的“微”字表示Flask......
  • vue3 自定义指令控制按钮权限
    经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制。当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接......
  • springboot+vue前后端分离项目搭建
    今天开始学习springboot+vue的前后端分离项目,跟着bili的视频开始做起。第一步安装node.js node.js自带npm插件,npm是node的一个包管理工具,安装好了node.js,就安装了npm......
  • 1.2 继承
    最后一种给元素添加样式的方式:继承。比如通常会给<"body">元素加上font-family,里面的所有祖先元素都会继承这个字体,就不必给页面的每个元素明确指定字体了body{font......
  • 将侧边栏制成inclusion_tag
    在开发过程中,像侧边栏这种功能的版块,我们在很多页面都需要使用到的时候,我们则需要在视图函数中书写重复的代码,这样很繁琐,我们可以将侧边栏制成inclusion_tag,后面我们需要......