1. IO: 업로드 및 다운로드, 쓰기 및 쓰기
스트림: 선입선출 방식으로 흐르는 일련의 데이터 흐름, 파이프라인, 프로그램 중심, 프로그램 및 네트워크 파일 | | 서버 | 어레이.. (추천 관련 강좌: java 비디오 튜토리얼)
분류
1) 흐름 방향에 따라:
입력 스트림
2) 운영 단위:
바이트 스트림 (유니버설 스트림): 모든 콘텐츠를 바이트로 변환할 수 있으며 텍스트, 그림 및 오디오를 전송할 수 있습니다. 문자 스트림: 일반 텍스트 데이터만 조작할 수 있습니다.
3) 기능에 따라:
노드 스트림: 소스를 래핑합니다. 기본 기능 구현: 예 노드 스트림은 성능을 향상시키고 효율성을 향상시킵니다
4) 각 카테고리는 서로 보완적입니다
바이트 스트림
(1) 바이트 입력 스트림: InputStream 이 추상 클래스는 슈퍼 클래스입니다. 바이트 입력 스트림을 나타내는 모든 클래스 중 FileInputStream은 파일 시스템의 파일에서 입력 바이트를 얻습니다.
//字节流输入 InputStream //导包 导包快捷键: ctrl+shift+o import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class Demo01 { public static void main(String[] args) throws IOException { //FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定 //FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream, 该文件通过文件系统中的 File 对象 file 指定 InputStream is=new FileInputStream(new File("D:/test.txt"));//创建D盘符的根目录下的文件 System.out.println(is); //方式1: int read() 读入数据 一个字节一个字节读入 /*int num=is.read(); System.out.println((char)num); num=is.read(); System.out.println((char)num); System.out.println((char)(is.read()));*/ //方式2:使用循环,循环读入,可以简化代码,重复代码只写一次,但还是一个字节一个字节的读入 /*int num=-1; while((num=is.read())!=-1){ System.out.println((char)num); }*/ //方式3:int read(byte[] b) 一个字节数组一个字节数组的读入 //返回值: 返回读入到字节数组中数据的个数,没有读到返回-1 byte[] car=new byte[1]; //int len=is.read(car); int len=-1; while((len=is.read(car))!=-1){ System.out.println(new String(car,0,len)); } //关闭 is.close(); } }
(2) 바이트 출력 스트림: OutputStream 이 추상 클래스는 출력 바이트 스트림을 나타내는 모든 클래스의 슈퍼 클래스입니다. 파일 출력 스트림은 File
//字节输出流 OutputStream //导包 导包快捷键: ctrl+shift+o import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class Demo02 { public static void main(String[] args) { //FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流 //FileOutputStream(String name,boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流 //FileOutputStream(File file,boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流 //boolean append 返回值:true追加,false不追加(默认false) OutputStream os=null; //try...catch(){} 捕捉异常,处理异常 try { //1.选择流 os=new FileOutputStream("D:/hhh.txt",hhtrue); //文件不存在,系统会自动帮我们创建,但文件夹不会 //2.准备数据 String str="要好好学习,天天向上..."; byte[] c和=str.getBytes(); //3.写出 void write(byte[] b) os.write(ch); //4.刷出 os.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ //5.关闭 try {//预防空指针异常 if(os!=null){ os.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
Character stream
의 출력 스트림에 데이터를 쓰는 데 사용됩니다. 일반 텍스트에서만 작동할 수 있습니다
1) 노드 스트림:
(1) 문자 입력 스트림: Reader는 추상 클래스입니다. FileReader는 문자 파일을 읽기 위한 편리한 클래스
//字符输入流 Reader //导包 导包快捷键: ctrl+shift+o import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class Demo03 { public static void main(String[] args) { //FileReader(String fileName) Reader rd=null; try { //1.选择流 rd=new FileReader("D:/hehe.txt");//创建D盘符的根目录下的文件 //2.读入 //方法1:int read() 读取单个字符。 /*System.out.println((char)rd.read()); System.out.println((char)rd.read()); System.out.println((char)rd.read()); System.out.println((char)rd.read());*/ int len=-1; //存储读到的数据 如果为-1,证明已达到末尾 //方法2: /*while(-1!=(len=rd.read())){ System.out.println((char)len); }*/ //方法3:int read(char[] cbuf) 将字符读入数组。 char[] car=new char[1024]; while((len=rd.read(car))!=-1){ System.out.println(new String(car,0,len)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(rd!=null){ try { //关闭功能 rd.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
를 사용합니다. (2) 문자 출력 스트림: Writer는 문자 스트림을 쓰기 위한 추상 클래스입니다. FileWriter는 문자 파일 쓰기에 편리한 클래스입니다.
//字符输出流:Writer //导包 导包快捷键: ctrl+shift+o import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class CharDemo02 { public static void main(String[] args) { //FileWriter(File file) //默认不追加 //FileWriter(File file, boolean append) //FileWriter(String file) //FileWriter(String file, boolean append) Writer rt=null; try { //1.选择流 rt=new FileWriter("D:/houhou.txt",true); //2.写出 /* void write(char[] cbuf) 写入字符数组 void write(char[] cbuf, int off, int len) 写入字符数组的某一部分 void write(int c) 写入单个字符 void write(String str) 写入字符串 void write(String str, int off, int len) 写入字符串的某一部分 */ rt.write(97); rt.write("\r\n"); //换行 rt.write("你真好看!!!!"); rt.write("\r\n"); rt.write("你真好看!!!!",2,2); rt.write("\r\n"); char[] ch={'a','b','c','d','e'}; rt.write(ch); rt.write("\r\n"); rt.write(ch,2,3); //3.刷出 rt.flush(); } catch (IOException e) { e.printStackTrace(); } finally{ //4.关闭 if(null!=rt){ try { rt.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
기능적 흐름
버퍼링된 스트림: 향상된 기능, 향상된 성능, 더 빠른 읽기 및 쓰기 효율성
1) 바이트 스트림:
BufferedInputStream 바이트 입력 스트림 버퍼링 스트림
BufferedOutputStream 바이트 출력 스트림 버퍼링 스트림
새로운 방법은 없습니다. 다형성 사용
//导包 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class BufferedInputStream01 { public static void main(String[] args) throws IOException { //1.选择流 //BufferedInputStream(InputStream in) InputStream is=new BufferedInputStream(new FileInputStream("D:/hehe.txt")); OutputStream os=new BufferedOutputStream(new FileOutputStream("E:/hengheng.txt") ); //2.读写 byte[] car=new byte[1024]; int len=-1; while((len=is.read(car))!=-1){ os.write(car,0,len); } //3.刷出 os.flush(); //4.关闭 os.close(); is.close(); } }
2) 문자 스트림:
BufferedReader 문자 입력 스트림 버퍼 스트림
새로운 메소드: String readLine() 텍스트 라인 읽기
BufferedWriter 문자 출력 스트림 버퍼 스트림
새로운 메소드: void newLine() 쓰기 줄 구분자
//导包 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class BufferedReader02 { public static void main(String[] args) throws IOException { //1.选择流 导包快捷键: ctrl+shift+o BufferedReader br=new BufferedReader(new FileReader("D:/hehe.txt")); BufferedWriter bw=new BufferedWriter(new FileWriter("D:/ccc.txt")); //2.读写 String msg=null; while((msg=br.readLine())!=null){ bw.write(msg); bw.newLine(); } //3.刷出 bw.flush(); //4.关闭 bw.close(); br.close(); } }
데이터 스트림(바이트 노드 스트림)
데이터 스트림(바이트 노드 스트림):
기본 데이터 유형 + 바이트 스트림 함수 스트림의 일종인 문자열 유형 데이터 읽기 및 쓰기
DataInputStream 신규 메서드: readXxx()
DataOutputStream 새 메서드: writeXxx()
다형성이 불가능한 새 메서드가 있습니다. 먼저 쓴 다음 write
발생할 수 있는 예외: EOFException 파일이 있고 내용을 읽습니다. 아니요, 무엇을 읽어야 할 것은 작성된 소스 파일입니다
//导包 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Data01 { public static void main(String[] args) throws IOException { //调用方法 write("D:/data.txt"); read("D:/data1.txt"); } //读入 public static void read(String path) throws IOException{ //1.输入流 数据类型+数据 DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream(path))); //2.读入 int i=in.readInt(); boolean b=in.readBoolean(); String s=in.readUTF(); System.out.println(i+"-->"+b+"-->"+s); //3.关闭 in.close(); } //写出 public static void write(String path) throws IOException{ //1.输出流 DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path))); //2.准备数据 int i=101; boolean f=false; String s="哈哈"; //3.写出 写出和读入的顺序要保持一致 out.writeInt(i); out.writeBoolean(f); out.writeUTF(s); //4.刷出 out.flush(); //5.关闭 out.close(); } }
객체 스트림
객체 저장 데이터 유형 + 데이터
바이트 기능 스트림: | 읽기 및 쓰기 객체 유형 데이터를 전송하려는 경우 객체 스트림을 사용하여
직렬화: 객체 유형 데이터를 저장 가능한 | 전송 가능한 상태로 변환하는 프로세스
ObjectInputStream() 역직렬화된 입력 스트림 새 메서드: readObject()
ObjectOutputStream() 직렬화된 출력 스트림 새 메서드: writeObject()
참고:
1 ) 먼저 직렬화한 다음 역직렬화
2) 직렬화와 역직렬화는 동일한 순서로 읽고 씁니다
3) 모든 클래스를 직렬화할 수 있는 것은 아닙니다. java.io .직렬화 가능한 빈 인터페이스
4) 모든 속성을 직렬화할 필요는 없습니다 임시
5) 정적 콘텐츠는 직렬화되지 않습니다.
6) 상위 클래스가 직렬화 가능 인터페이스를 구현하는 경우 하위 클래스의 모든 콘텐츠를 직렬화할 수 있습니다.
하위 클래스가 직렬화 가능 인터페이스를 구현하지만 상위 클래스는 그렇지 않은 경우. 하위 클래스에 고유한 콘텐츠만 직렬화합니다
//导包 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Arrays; public class ObjectDemo02 { public static void main(String[] args) throws IOException, ClassNotFoundException { write("D:/object.txt"); read("D:/object.txt"); } //反序列化输入 public static void read(String path) throws IOException, ClassNotFoundException{ //1.输入流 ObjectInputStream is=new ObjectInputStream(new BufferedInputStream(new FileInputStream(path))); //2.读入 Object p= is.readObject(); int[] arr= (int[]) is.readObject(); if(p instanceof Person){ Person person=(Person)p; System.out.println(person.getName()); } System.out.println(p); System.out.println(Arrays.toString(arr)); //3,关闭 is.close(); } //序列化输出 public static void write(String path) throws IOException{ //1.输出对象信息 ObjectOutputStream os=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path))); //2.准备数据 Person p=new Person("aaa",18); int[] arr={1,2,3,4}; //3.输出 os.writeObject(p); os.writeObject(arr); //4.刷出 os.flush(); //5.关闭 os.close(); } } //接口 class Person implements Serializable{ private String name; private static int age; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
2. 파일 클래스
파일 클래스: 파일 및 디렉터리 경로 이름의 추상 표현
제공 기능: 파일 외부에서 작동하는 기능이 있지만 파일 내부의 컨텐츠는 작동할 수 없습니다. file
실제 경로|file을 정의할 수 있고, 없으면 정의할 수도 있으므로 추상 표현식
생성자: File(File parent, String child) 상위 추상 경로명 및 하위 경로명 string에 따라 생성 새 File 인스턴스
File(String pathname) 주어진 경로명 문자열을 추상 경로명으로 변환하여 새 File 인스턴스를 생성합니다.
File(String parent, String child) 상위 경로명 문자열과 하위 경로명을 기반으로 새 File 인스턴스를 생성합니다. string
이 기사는 java 입문 튜토리얼 칼럼에서 가져온 것입니다. 배우신 것을 환영합니다!
위 내용은 Java에서 IO 스트림을 분류하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!