主页 > 其他  > 

java基础——IO流

java基础——IO流

目录

1. 文件与常见文件操作

1.1 文件概念

1.2 常见文件操作

2. Java IO 流原理及分类

2.1 原理

2.2 分类

3. 基本流类介绍

3.1 FileInputStream

3.2 FileOutputStream

3.3 FileReader

​编辑

3.4 FileWriter

​编辑

4. 节点流和处理流

4.1 节点流

4.2 处理流(包装流)

4.3 节点流和处理流的区别和联系

5. 打印流

5.1 PrintStream 和 PrintWriter

6. Properties 类


1. 文件与常见文件操作 1.1 文件概念

在计算机中,文件是存储在存储设备(如硬盘、U 盘等)上的数据集合,可以是文本文件(如 .txt、.java)、二进制文件(如 .jpg、.mp3)等。大家经常使用的word文档,txt文件、excel文件...都是文件。

文件在程序中是以流的形式操作的

1.2 常见文件操作

创建文件对象相关构造器和方法

new File(String pathname) //根据路径构建一个File对象 new File(File parent,String child)//根据父目录文件+子路径构建 new File(String parent,String child)//根据父目录+子路径构建

文件创建、获取文件的信息、删除

import java.io.File; import java.io.IOException; public class FileExample { public static void main(String[] args) { // 创建一个 File 对象,指向一个文件 File file = new File("test.txt"); try { // 创建新文件 if (file.createNewFile()) { System.out.println("文件创建成功"); } else { System.out.println("文件已存在"); } // 获取文件信息 System.out.println("文件名称: " + file.getName()); System.out.println("文件路径: " + file.getAbsolutePath()); System.out.println("文件大小: " + file.length() + " 字节"); // 删除文件 if (file.delete()) { System.out.println("文件删除成功"); } else { System.out.println("文件删除失败"); } } catch (IOException e) { e.printStackTrace(); } } } 2. Java IO 流原理及分类 2.1 原理

Java IO 流是一种用于处理输入输出的机制,它通过流的方式将数据从一个源(如文件、网络连接等)传输到另一个目标(如另一个文件、控制台等)。可以把流想象成一个管道,数据在管道中流动。

2.2 分类 按数据流向分: 输入流:用于从数据源读取数据到程序中。输出流:用于将程序中的数据写入到目标位置。 按处理数据的单位分: 字节流:以字节(8 位)为单位处理数据,适合处理二进制数据。字符流:以字符(16 位)为单位处理数据,适合处理文本数据。

3. 基本流类介绍 3.1 FileInputStream

FileInputStream 是字节输入流,用于从文件中读取字节数据。

import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("test.txt")) { int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } } 3.2 FileOutputStream

FileOutputStream 是字节输出流,用于将字节数据写入到文件中。

import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamExample { public static void main(String[] args) { String content = "Hello, Java IO!"; try (FileOutputStream fos = new FileOutputStream("test.txt")) { byte[] bytes = content.getBytes(); fos.write(bytes); System.out.println("数据写入成功"); } catch (IOException e) { e.printStackTrace(); } } } 3.3 FileReader

FileReader 是字符输入流,用于从文件中读取字符数据。

import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Filereader { public static void main(String[] args) throws IOException { String filePath = "d://news1.txt"; String fileOut = "d://news2.txt"; FileReader fileReader = new FileReader(filePath); FileWriter fileWriter = new FileWriter(fileOut); int readLen = 0; char[] buf = new char[8]; while((readLen = fileReader.read(buf)) != -1){ fileWriter.write(buf,0,readLen); } fileWriter.close(); fileReader.close(); } } 3.4 FileWriter

FileWriter 是字符输出流,用于将字符数据写入到文件中。

import org.junit.jupiter.api.Test; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; public class Fileoutputstream { @Test public void WriteFile(){ String filePath = "d://news2.txt"; FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(filePath); String str = "hello韩顺平"; fileOutputStream.write(str.getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { e.printStackTrace(); }finally { try { fileOutputStream.close();//文件流关闭 } catch (IOException e) { e.printStackTrace(); } } } } 4. 节点流和处理流 4.1 节点流

节点流是直接与数据源或目标相连的流,如 FileInputStream、FileOutputStream、FileReader、FileWriter 等,它们可以直接从文件、内存等数据源读取或写入数据。

4.2 处理流(包装流)

处理流是对节点流进行包装的流,它可以增强节点流的功能,如提供缓冲、转换等功能。例如 BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter 等。

分类字节处理流字节输出流字符输入流字符输出流抽象基类InputStreamOutputStreamReaderWriter访问文件FileInputStreamFileOutputStreamFileReaderFileWriter访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter访问管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter访问字符串StringReaderStringWriter缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter转换流InputStreamReaderOutputStreamWriter对象流ObjectInputStreamObjectOutputStream抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter打印流PrintStreamPrintWriter推回输入流PushbackInputStreamPushbackReader特殊流DataInputStreamDataOutputStream

4.3 节点流和处理流的区别和联系 节点流是底层流/低级流, 直接和数据源相接处理流包装节点流, 既可以消除不同节点流之间的实现差异, 也可以提供更方便的方法来完成输入输出处理流对节点流进行包装,使用了修饰器设计模式, 不会直接与数据源相连

示例:使用 BufferedInputStream 和 BufferedOutputStream 复制文件

import java.io.*; public class BufferedStreamExample { public static void main(String[] args) { try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = bis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead); } System.out.println("文件复制成功"); } catch (IOException e) { e.printStackTrace(); } } } 5. 打印流 5.1 PrintStream 和 PrintWriter

打印流提供了方便的打印方法,如 print()、println() 等。PrintStream 是字节打印流,PrintWriter 是字符打印流。

示例:使用 PrintWriter 写入数据到文件

import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class PrintWriterExample { public static void main(String[] args) { try (PrintWriter pw = new PrintWriter(new FileWriter("test.txt"))) { pw.println("Hello, PrintWriter!"); pw.print("This is a test."); System.out.println("数据写入成功"); } catch (IOException e) { e.printStackTrace(); } } } 6. Properties 类

Properties 类是 Hashtable 的子类,用于处理属性文件,属性文件通常以 .properties 为扩展名,文件内容以键值对的形式存储。

示例:读取和写入属性文件

import java.io.*; import java.util.Properties; public class PropertiesExample { public static void main(String[] args) { Properties properties = new Properties(); // 写入属性文件 try (FileOutputStream fos = new FileOutputStream("config.properties")) { properties.setProperty("username", "admin"); properties.setProperty("password", "123456"); properties.store(fos, "Configuration"); System.out.println("属性文件写入成功"); } catch (IOException e) { e.printStackTrace(); } // 读取属性文件 try (FileInputStream fis = new FileInputStream("config.properties")) { properties.load(fis); String username = properties.getProperty("username"); String password = properties.getProperty("password"); System.out.println("Username: " + username); System.out.println("Password: " + password); } catch (IOException e) { e.printStackTrace(); } } }

通过以上内容,你可以对 Java IO 流有一个较为全面的了解,包括文件操作、流的原理和分类、基本流类的使用、节点流和处理流、打印流以及 Properties 类的应用。

标签:

java基础——IO流由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“java基础——IO流