Java IO流
2022/7/28 14:31:13
本文主要是介绍Java IO流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java IO流
什么是IO?
就是Input和Output,通过IO可以完成硬盘文件的读和写。
输入(Input)、读(Read)、输入流(InputStream):从硬盘到内存中。
输出(Output)、写(Write)、输出流(OutputStream):从内存到硬盘中。
IO流的分类
以内存作为参照物,按照流的方向分类:
- 往内存中去,叫做输入
- 从内存中出来,叫做输出。
按照读取数据的不同进行分类:
- 字节流:按照字节的方式读取数据,一次读取1个字节Byte,即一次读取8个二进制。这种流什么类型的文件都可以读取:文本文件、图片、声音文件、视频文件。
- 字符流:按照字符的方式读取数据,一次读取1个字符char。这种流只能读取纯文本文件,比如txt文件,不能读取word。比如中文字符就是占2个字节,使用字节流就只能读取一半。
IO流的类型
四个分支:
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
以上都是抽象类,都实现了Closeable接口。
结论:以”Stream“结尾的都是字节流,以”Reader“和”Writer“结尾的都是字符流。
用完了流:一定要用close关闭流。
输出流都实现了Flushable接口,都是可刷新的。所以在输出流最终输出之后,一定要使用flush()对管道进行清空管道。
流的具体类型
文件专属:
FileInputStream
FileOutputStream
FileReader
FileWriter
转换流(将字节流转换成字符流):
InputStreamReader
OutputStreamWriter
缓冲流:
BufferedReader
BufferedWriter
BufferedInputStream
BufferedOutputStream
数据流专属:
DataInputStream
DataOutputStream
标准输出流:
PrintWriter
PrintStream
对象专属流:
ObjectInputStream
ObjectOutputStream
字节输入流FileInputStream
将磁盘文件以字节方式读入内存(即程序中使用)中。
构造方法:
- FileInputStream(File file):通过打开与实际文件的连接创建一个 输入流。
- FileInputStream(FileDescriptor fdobj):通过文件描述符,创建输入流。
- FileInputStream(String name):通过路径name,创建输入流。【常用】
常用方法:
- int read():读取一个字节,返回字节码。
- int read(byte[] b):从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组b中,返回的是读取到的字节数。减少硬盘和内存的交互,提高程序的执行效率。
- int available():获得剩余可读取的字节数量。
- long skip(long n):跳过n个字节读取数据。
代码如下:
public static void main(String[] args) { FileInputStream in = null; try { in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\实验.txt"); int data = 0; while ((data=in.read()) != -1){ //in.read()方法返回的是int类型,返回的为字节的ascii码,如果没有字节则返回-1 System.out.println(data); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //防止输入流为空。只有不为空时才可以关闭 if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
注意:IDEA默认路径是工程的根路径。
使用byte数组读取
public class IOTest02 { public static void main(String[] args) { FileInputStream in = null; try { in = new FileInputStream("C:\\Users\\Administrator\\Desktop\\实验.txt"); byte[] bytes = new byte[4]; int dataCount = 0; while ((dataCount=in.read(bytes)) != -1){ //dataCpunt为byte数组读取到的字节数,有多少个输出多少个 System.out.print(new String(bytes,0,dataCount)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //防止输入流为空。只有不为空时才可以关闭 if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
字节输出流FileOutputStream
构造方法:
- FileOutputStream(File file):以指定的File文件创建文件输出流
- FileOutputStream(File file,boolean append):以指定的File文件创建文件输出流,append为true,那么字节被写入文件的末尾。
- FileOutputStream(FileDescriptor fdobj):以指定的文件描述符文件创建文件输出流
- FileOutputStream(String name):以指定的文件路径名创建文件输出流
- FileOutputStream(String name,boolean append):以指定的文件路径名创建文件输出流,append为true,那么字节被写入文件的末尾。
常用方法:
- void write(byte[] b):将 b.length个字节从指定的字节数组写入此文件输出流。
- void write(byte[] b,int off,int len):将
len
字节从位于偏移量off
的指定字节数组写入此文件输出流。 - void write(int b):将指定的字节写入此文件输出流。
代码如下:
public static void main(String[] args) { FileOutputStream out = null; try { out = new FileOutputStream("myfile",true); // byte[] bytes = {97,98,99}; String str = "噼里啪啦"; byte[] bytes = str.getBytes(); out.write(bytes); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
复制
利用输入输出流进行复制
代码如下:
public static void main(String[] args) { FileInputStream in = null; FileOutputStream out = null; byte[] bytes = new byte[1024*1024]; try { in = new FileInputStream("E:\\team work\\主方程建模\\主方程运算.pdf"); out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\主方程运算.pdf"); int dataCount = 0; while((dataCount = in.read(bytes))!=-1){ out.write(bytes,0,dataCount); } } catch (IOException e) { e.printStackTrace(); }finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if(out !=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
字符输入流FileReader
将磁盘文件以字符方式读入内存(即程序中使用)中。只能读取文本文件。
构造方法:
- FileReader(File file):通过打开与实际文件的连接创建一个输入流。
- FileReader(FileDescriptor fdobj):通过文件描述符,创建输入流。
- FileReader(String filename):通过路径name,创建输入流。【常用】
常用方法:
- int read():读取一个字符,返回字节码。
- int read(char[] c):从一个输入流中读取一定数量的字符,并将这些字节存储到其缓冲作用的数组c中,返回的是读取到的字符数。减少硬盘和内存的交互,提高程序的执行效率。
- long skip(long n):跳过n个字符读取数据。
``
public static void main(String[] args) { FileReader reader = null; try { reader = new FileReader("C:\\Users\\Administrator\\Desktop\\实验.txt"); char[] c = new char[1024*512];//1MB int dataCount = 0; while((dataCount = reader.read(c))!=-1){ System.out.print(new String(c,0,dataCount)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
字符输入流FileWriter
构造方法:
- FileWriter(File file):以指定的File文件创建文件输出流
- FileWriter(File file,boolean append):以指定的File文件创建文件输出流,append为true,那么字节被写入文件的末尾。
- FileWriter(FileDescriptor fdobj):以指定的文件描述符文件创建文件输出流
- FileWriter(String name):以指定的文件路径名创建文件输出流
- FileWriter(String name,boolean append):以指定的文件路径名创建文件输出流,append为true,那么字节被写入文件的末尾。
常用方法:
- void write(int c):用数字输入
- void write(char[] c):用字符数组输入
- void write(char[] c,off,len):用字符数组输入,能够选取
- void write(String s):用字符串输入
- void write(String s,int off,int len):用字符串输入,能够选取
- void append():在文件原内容后边添加。
复制:通过字符流复制,只能对文本文件进行复制。
这篇关于Java IO流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23JAVA语音识别项目入门教程
- 2024-11-23Java云原生学习:从入门到实践
- 2024-11-22Java创业学习:初学者的全面指南
- 2024-11-22JAVA创业学习:零基础入门到实战应用教程
- 2024-11-22Java创业学习:从零开始的Java编程入门教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22JAVA对接阿里云智能语音服务学习教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22Java副业学习:零基础入门到实战项目
- 2024-11-22Java副业学习:零基础入门指南