Java IO 요약(미완성)
(1) InputStream(바이트 입력 스트림)
(2) Reader(문자 입력 흐름)
(3) OutputStream
(4) Writer
2. 파일 관련
(1) File 객체 만들기: File()
(2) 파일 생성, 삭제:createNewFile(), delete()
(3) 디렉터리 만들기: mkdir ()
(4) 디렉토리에 있는 파일을 나열합니다.
public String[] list(): 파일 이름만 나열
public File [] listFiles (): 파일의 전체 경로를 나열합니다.
(5) 실행 파일을 실행합니다.
Runtime ec = Runtime.getRuntime();
ec.exec(실행 가능한 파일 경로);
/**
*
* */
import java.io.*;
class hello{
public static void main(String[] args) {
String fileName="D:"+File.separator;
File f=new File(fileName);
print(f);
}
public static void print(File f){
if(f!=null){
if(f.isDirectory()){
File[] fileArray=f.listFiles();
if(fileArray!=null){
for (int i = 0; i < fileArray.length; i++) {
//
print(fileArray[i]);
}
}
}
else{
System.out.println(f);
}
}
}
}
3. 파일 바이트 스트림
(1) FileInputStream 클래스: FileInputStream(String name) 또는 FileInputStream(File file)
(2) FileOutputStream 클래스:
4. 파일 문자 스트림:
(1) FileReader 클래스:
(2) FileWriter 클래스:
(3) 바이트 흐름과 문자 흐름의 차이: 바이트 흐름은 유니코드 문자를 직접 조작할 수 없다. 한자가 파일에서 2바이트를 차지하기 때문에 바이트 흐름을 잘못 읽으면 부호화 현상이 나타날 수 있다. 문자 흐름을 사용하면 이런 현상을 피할 수 있다. 유니코드 문자에서 한자는 하나의 문자로 간주된다.
주의: write () 방법은 데이터를 버퍼에 먼저 기록합니다. 버퍼가 넘칠 때마다 버퍼의 내용은 자동으로 목적지에 기록됩니다. 흐름을 닫으면 버퍼의 내용은 바로 목적지에 기록됩니다. 흐름 호출flush () 방법은 현재 버퍼의 내용을 즉시 씻어내고 현재 버퍼의 내용을 목적지에 기록합니다.
5. 버퍼 스트림:
(1) BufferedReader 클래스: 이 입력 흐름은 반드시 Reader 흐름이어야 합니다. BufferedReader 흐름의 원본은 바로 이 버퍼입니다. 버퍼 입력 흐름은 버퍼에서 데이터를 읽습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* */
public class BufferedReaderDemo{
public static void main(String[] args){
BufferedReader buf = new BufferedReader(
new InputStreamReader(System.in));
String str = null;
System.out.println(" ");
try{
str = buf.readLine();
}catch(IOException e){
e.printStackTrace();
}
System.out.println(" :" + str);
}
}
(2) BufferedWriter 클래스: newLine () 를 호출하면 파일에 리셋 줄을 쓸 수 있고 flush () 를 호출하면 버퍼를 새로 고칠 수 있습니다.
6.배열 흐름:
(1) 배열 바이트 흐름: ByteArray InputStream, ByteArray OutputStream
흐름의 원본과 목표는 바이트 그룹입니다. 입출력 이상이 발생하지 않습니다. toByteArray () 는 출력 흐름이 버퍼에 기록된 모든 바이트를 되돌려줍니다.
(2) 배열 문자 흐름:CharArrayReader,CharArrayWriter
흐름의 원본과 목표는 모두 문자 그룹입니다. IO 이상이 발생하면 toCharArray () 는 출력 흐름이 버퍼에 기록된 모든 문자를 되돌려줍니다.
7. 문자열:
(1) StringReader 클래스
(2) StringWriter 클래스
흐름의 원본은 문자열이고, toString () 방법은 출력 흐름이 버퍼에 쓴 모든 문자를 되돌려줍니다
8. 데이터 흐름: 하나의 수치를 읽을 때 이 수치가 몇 바이트인지 신경 쓸 필요가 없다
(1) DataInputStream 클래스: DataInputStream(InputStream in)
(2) DataOutputStream 클래스: DataOutputStream(OutputStream out)
9. 대상 흐름: 대상 흐름을 사용하여 대상을 쓰거나 읽을 때 대상이 서열화되어야 한다.하나의 클래스가 Serializable 인터페이스를 실현하면, 이 클래스가 만든 대상은 서열화된 대상입니다.대상 흐름을 사용하여 대상을 파일에 쓸 때 이 대상이 서열화되었을 뿐만 아니라, 이 대상의 구성원 대상도 서열화되었다.
(1) ObjectInputStream(InputStream in):
(2) ObjectOutputStream(OutputStream out):
(3) readObject() 및 writeObject(Object obj):
10. 시리얼화 및 객체 클론
(1) 대상이 clone() 방법을 사용하면 대상의'부본'을 얻을 수 있다. 이를 원 대상의 복제 대상이라고 하는데 부본 실체의 변화는 원 대상의 실체가 변화를 일으키지 않는다.
(2) 만약에 원 대상에 인용형 구성원 변수가 있다면 복제 대상에 대응하는 구성원 변수의 인용은 원 대상의 그 구성원 변수의 인용과 같다. 복제 대상이 자신의 이 구성원 변수에 인용된 실체에 대한 조작은 원 대상에 대응하는 구성원 변수의 실체에 영향을 줄 것이다. 이것은 깊이 있는 복제 문제와 관련된다. 프로그램은 반드시 clone() 방법을 다시 써야 하기 때문에 프로그래밍의 난이도를 증가시켰다.
대상 흐름을 사용하면 서열화된 대상의 복제를 쉽게 얻을 수 있습니다.객체의 출력 흐름에 쓰기만 하면 객체 입력 흐름으로 다시 읽는 객체가 원래 객체의 클론입니다.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Goods implements Serializable
{
private static final long serialVersionUID = 1L;
String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Goods(String name) {
super();
this.name = name;
}
}
class Shop implements Serializable
{
private static final long serialVersionUID = 1L;
Goods goods[];
public Goods[] getGoods() {
return goods;
}
public void setGoods(Goods[] goods) {
this.goods = goods;
}
}
public class Main{
public static void main(String[] args) {
Shop shop1 = new Shop();
Goods s1[] = {new Goods("TV"), new Goods("PC")};
shop1.setGoods(s1);
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(shop1);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
ObjectInputStream objectIn = new ObjectInputStream(in);
Shop shop2 = (Shop)objectIn.readObject();
Goods good1[] = shop1.getGoods();
Goods good2[] = shop2.getGoods();
System.out.println("shop1 :");
for(int i = 0; i < good1.length; i++)
System.out.println(good1[i].getName());
System.out.println("shop2 :");
for(int i = 0; i < good2.length; i++)
System.out.println(good2[i].getName());
Goods s2[] = {new Goods("MP3"), new Goods("Phone")};
shop2.setGoods(s2);
good1 = shop1.getGoods();
good2 = shop2.getGoods();
System.out.println(" ,shop1 :");
for(int i = 0; i < good1.length; i++)
System.out.println(good1[i].getName());
System.out.println(" ,shop2 :");
for(int i = 0; i < good2.length; i++)
System.out.println(good2[i].getName());
} catch (Exception e) {
}
}
}
:
shop1 :
TV
PC
shop2 :
TV
PC
,shop1 :
TV
PC
,shop2 :
MP3
Phone
(3) Externalizable 커넥터:
Serializable 인터페이스에서 설명하는 클래스의 대상의 속성은 모두 서열화되지만, 서열화된 내용을 사용자 정의하려면 Externalizable 인터페이스를 실현해야 합니다.
하나의 클래스가 Externalizable 인터페이스를 사용할 때, 이 클래스에는 반드시 인삼이 없는 구조 함수가 있어야 한다. 그렇지 않으면 구조할 때 이상이 발생한다. 이것은 반서열일 때 인삼이 없는 구조 함수를 기본적으로 호출하기 때문이다.
import java.io.Externalizable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
/**
*
* */
public class ExternalizableDemo{
public static void main(String[] args) throws Exception{
ser(); //
dser(); //
}
public static void ser() throws Exception{
File file = new File("d:" + File.separator + "hello.txt");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
file));
out.writeObject(new Person("gaosheng", 20));
out.close();
}
public static void dser() throws Exception{
File file = new File("d:" + File.separator + "hello.txt");
ObjectInputStream input = new ObjectInputStream(new FileInputStream(
file));
Object obj = input.readObject();
input.close();
System.out.println(obj);
}
}
class Person implements Externalizable{
public Person(){
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return " :" + name + " :" + age;
}
// , ,
@Override
public void writeExternal(ObjectOutput out) throws IOException{
out.writeObject(this.name);
out.writeInt(age);
}
// ,
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException{
this.name = (String) in.readObject();
this.age = in.readInt();
}
private String name;
private int age;
}
:
:gaosheng :20
(4) Serializable 인터페이스를 사용하여 서열화 작업을 할 때 대상의 특정한 속성이 서열화되어 저장되지 않으려면transient 키워드를 사용하여 설명할 수 있습니다
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
*
* */
public class serDemo{
public static void main(String[] args) throws Exception{
ser(); //
dser(); //
}
public static void ser() throws Exception{
File file = new File("d:" + File.separator + "hello.txt");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
file));
out.writeObject(new Person1("gaosheng", 20));
out.close();
}
public static void dser() throws Exception{
File file = new File("d:" + File.separator + "hello.txt");
ObjectInputStream input = new ObjectInputStream(new FileInputStream(
file));
Object obj = input.readObject();
input.close();
System.out.println(obj);
}
}
class Person1 implements Serializable{
public Person1(){
}
public Person1(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return " :" + name + " :" + age;
}
//
private transient String name;
private int age;
}
:
:null :20
11. 파이프 흐름: 파이프 흐름은 주로 두 라인 간의 통신을 할 수 있다.
/**
*
* */
import java.io.*;
/**
*
* */
class Send implements Runnable{
private PipedOutputStream out=null;
public Send() {
out=new PipedOutputStream();
}
public PipedOutputStream getOut(){
return this.out;
}
public void run(){
String message="hello , gaosheng";
try{
out.write(message.getBytes());
}catch (Exception e) {
e.printStackTrace();
}try{
out.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
* */
class Recive implements Runnable{
private PipedInputStream input=null;
public Recive(){
this.input=new PipedInputStream();
}
public PipedInputStream getInput(){
return this.input;
}
public void run(){
byte[] b=new byte[1000];
int len=0;
try{
len=this.input.read(b);
}catch (Exception e) {
e.printStackTrace();
}try{
input.close();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(" "+(new String(b,0,len)));
}
}
/**
*
* */
class hello{
public static void main(String[] args) throws IOException {
Send send=new Send();
Recive recive=new Recive();
try{
//
send.getOut().connect(recive.getInput());
}catch (Exception e) {
e.printStackTrace();
}
new Thread(send).start();
new Thread(recive).start();
}
}
:
hello , gaosheng
12. 랜덤 읽기 및 쓰기 흐름
(1) RandomAccessFile 클래스에서 만든 흐름의 지향은 소스가 될 수도 있고 목적지가 될 수도 있습니다.
(2) RandomAccessFile 스트림의 readLine() 메서드는 ASCII 문자가 아닌 파일을 읽을 때 인코딩에 문제가 발생할 수 있습니다. 다음 메서드를 사용하여 읽습니다.
String str = in.readLine();
byte b[] = str.getBytes(“iso-8895-1”);
String content = new String(b);
13. Scanner를 사용한 파일 구문 분석
(1) Scanner 클래스와 정규 표현식을 사용하여 파일을 해석하는 특징은 시간으로 공간을 바꾸는 것이다. 즉, 해석 속도는 상대적으로 느리지만 메모리를 절약하는 것이다.
14. 파일 잠금
(1) FileChannel channel = input.getChannel();
FileLock lock = channel.tryLock();//channel.lock();
…
lock.release();
15. 입력 출력 리셋: 오류 로그 데이터 저장 등
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
/**
* System.err
* */
public class systemErr{
public static void main(String[] args){
File file = new File("d:" + File.separator + "hello.txt");
System.err.println(" ");
try{
System.setErr(new PrintStream(new FileOutputStream(file)));
// System.setOut(new PrintStream(new FileOutputStream(file)));
}catch(FileNotFoundException e){
e.printStackTrace();
}
System.err.println(" !");
}
}
16. 기타 흐름
(1) 흐름 결합: SequenceInputStream
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;
/**
*
* */
public class SequenceInputStreamDemo{
public static void main(String[] args) throws IOException{
File file1 = new File("d:" + File.separator + "hello1.txt");
File file2 = new File("d:" + File.separator + "hello2.txt");
File file3 = new File("d:" + File.separator + "hello.txt");
InputStream input1 = new FileInputStream(file1);
InputStream input2 = new FileInputStream(file2);
OutputStream output = new FileOutputStream(file3);
//
SequenceInputStream sis = new SequenceInputStream(input1, input2);
int temp = 0;
while((temp = sis.read()) != -1){
output.write(temp);
}
input1.close();
input2.close();
output.close();
sis.close();
}
}
(2) 파일 압축 해제 흐름: ZipInputStream 클래스, ZipOutputStream 클래스
(3) 예비(fallback): PushbackInputStream 클래스
17. 요약
분류하다
바이트 입력 스트림
바이트 출력 스트림
문자 입력 스트림
문자 출력 흐름
추상 기류
InputStream
OutputStream
Reader
Writer
파일 액세스
FileInputStream
FileOutputStream
FileReader
FileWriter
액세스 배열
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
액세스 문자열
StringReader
StringWriter
완충류
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
전환 흐름
InputStreamReader
OutputStreamWriter
개체 흐름
ObjectInputStream
ObjectOutputStream
추상 기류
FilterInputStream
FilterOutputStream
FilterReader
FilterWriter
인쇄 흐름
PrintStream
PrintWriter
예비(fallback) 입력 흐름
PushbackInputStream
PushbackReader
특수류
DataInputStream
DataOutputStream
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.