입출력 흐름의 초보적 이해

5461 단어
1. 입출력 입출력의 대상은 데이터이고 데이터의 저장 구역은 시디나 디스크 등 장치이며 데이터를 저장하는 공간-----메모리도 있다. 그 중에서 디스크의 속도가 비교적 느리고 메모리의 속도가 비교적 빠르다. 데이터를 메모리로 읽는 동작을 입력이라고 하고 데이터를 메모리에서 디스크로 저장하는 동작을 출력이라고 한다.2. 흐름의 분류는 흐름에 따라 분류: 입력 흐름과 출력 흐름은 데이터 내용에 따라 바이트 흐름(바이트를 처리할 수 있는 흐름 대상), 문자 흐름(문자를 처리할 수 있는 흐름 대상)** 문자 흐름의 실질: ** 바이트 흐름은 문자 바이트 데이터를 읽은 후 직접 조작하지 않고 지정한 인코딩표를 찾아서 대응하는 문자를 얻고 문자를 조작한다. 간단하게 말하면 문자 흐름=바이트 흐름+인코딩표이다.3. 상용 기류;바이트 스트림 일반 기본 클래스: InputStream OutputStream 문자 스트림 일반 기본 클래스: Reader Writer 2. 예:
1. FileWriter 사용:
적절한 흐름 만들기 - 작업 경로를 지정해야 합니다. 어떤 파일인지 new FileWriter(String fileName)(이 방법으로 흐름을 만듭니다. 지정한 디렉터리에 파일이 없으면 만들고 존재하면 덮어씁니다).파일에 쓰기 (write 방법 호출);flush 방법을 사용해서 버퍼에 기록된 내용을 파일로 씻어냅니다. (write (String content) 방법을 사용해서 기록할 때 버퍼에 내용을 썼습니다. 디스크에 있는 파일에는 사실상 이 내용이 존재하지 않습니다.)흐름 닫기 (colose 방법 - - - 사실상 colose 방법을 호출하면 버퍼를 자동으로 씻어내고 버퍼의 내용을 텍스트에 기록합니다) flush 방법을 호출하는 것과 colose 방법을 호출하는 것의 차이점: flush 방법을 호출한 후에도 계속 쓸 수 있지만,colose 이후에는 계속 쓸 수 없고 오히려 IO 이상을 던집니다.
FileWriter fileWriter = null; try { fileWriter = new FileWriter(“test.txt”); fileWriter.write(“eke test”); fileWriter.flush(); } catch(IOException e) {System.err.println(e.getMessage(), throw new RuntimeException(파일 쓰기 실패!),
} finally { if (fileWriter != null) { try { fileWriter.close(); } catch(Exception e) {System.err.println(e.getMessage(), throw new RuntimeException(파일 흐름 닫기 실패);
}

} 실행 결과는 프로젝트의 실행 디렉터리에 텍스트 파일test를 생성합니다.txt 및 파일에 텍스트 쓰기:eke test.
** 코드 해석: ** 먼저 FileWriter를 만듭니다. 이 클래스는 주로 문자 흐름을 만들고 파일을 조작하는 데 사용됩니다.IO 작업에서 IOException 예외가 자주 발생하므로 예외를 포착해야 합니다.또한 하나의 흐름을 만들어서 파일 작업에 운영체제의 자원을 호출하고 사용이 끝난 후에 유한한 운영체제 자원을 방출해야 한다. 그렇지 않으면 시스템 자원이 소모될 수 있다.따라서finally에서close 방법을 호출해야 하는 동시에clos 방법도 이상이 발생할 수 있기 때문에 포획을 해야 한다. fileWriter가null이 되지 않는 이유는 fileWriter가 만들 때 실패할 수 있기 때문이다(존재하지 않는 디스크를 지정하는 경우).
주의: 위 첫 번째 단계에서 언급한 바와 같이 new FileWriter (String fileName) 를 사용하여 흐름을 만들면 원래 존재하는 파일을 덮어쓰기 때문에 존재하는 파일을 다시 쓰기 위해 다시 불러오는 구조 함수인 new FileWriter (String fileName,boolean append) 를 사용해야 합니다.
2. FileRead의 사용:
적절한 흐름 만들기 -- 작업의 경로를 지정해야 하고 파일 파일(String fileName)을 조작해야 합니다. (이 방법으로 흐름을 만들면 지정한 디렉터리에 파일이 없으면 만들고 존재하면 덮어씁니다).파일을 읽는 방법(read 방법을 사용합니다. 이 방법은 int 값을 되돌려줍니다. 이 값은 유니코드의 부호인 0~65535 사이의 정수를 나타냅니다.주의: 되돌아오는 것은 부호이기 때문에 문자로 출력하려면char 형식의 재수출로 강제로 변환해야 하며, FileWriter의 write 방법을 사용할 때는 되돌아오는 부호로 직접 쓸 수 있습니다.flush 방법을 사용해서 버퍼에 기록된 내용을 파일로 씻어냅니다. (write (String content) 방법을 사용해서 기록할 때 버퍼에 내용을 썼습니다. 디스크에 있는 파일에는 사실상 이 내용이 존재하지 않습니다.)흐름 닫기 (colose 방법 - - - 사실상 colose 방법을 호출하면 버퍼를 자동으로 씻어내고 버퍼의 내용을 텍스트에 기록합니다) flush 방법을 호출하는 것과 colose 방법을 호출하는 것의 차이점: flush 방법을 호출한 후에도 계속 쓸 수 있지만,colose 이후에는 계속 쓸 수 없고 오히려 IO 이상을 던집니다.
FileReader fileReader = null; try { fileReader = new FileReader(“test.txt”);
int charUnit=0;
while((charUnit=fileReader.read())!=-1){
    System.out.print((char)charUnit);
}

} catch(IOException e) {System.err.println(e.getMessage(), throw new RuntimeException(파일 쓰기 실패!);
} finally { if (fileReader != null) { try { fileReader.close(); } catch(Exception e) {System.err.println(e.getMessage(), throw new RuntimeException(파일 흐름 닫기 실패);
}

} 다음은 출력 결과: Disconnected from the target VM,address:'127.0.0.1:36988',transport:'socket'eke test Process finished with exit code 0
3. 개선:char수 그룹을 사용하여 여러 문자를 한꺼번에 읽기:char[] contentArray = new char[1024];
int charUnit = 0; while ((charUnit = fileReader.read(contentArray)) != -1) { System.out.println(new String(contentArray,0,charUnit)); } 위 코드의read 방법은 매개 변수char[]contentArray를 사용했습니다.이 방법은 읽은 개수를 되돌려주고 읽은 문자를 콘텐츠 Array 그룹에 삽입합니다.4.FileWriter와 FileReader의 연합 사용 ---FileReader fileReader =null 복제;FileWriter fileWriter = null;
    try {
        fileReader = new FileReader("  ----  .txt");
        fileWriter = new FileWriter("test.txt");

        char[] contentArray = new char[1024];

        int charUnit = 0;
        while ((charUnit = fileReader.read(contentArray)) != -1) {
            System.out.println(new String(contentArray, 0, charUnit));
            fileWriter.write(contentArray, 0, charUnit);
        }
    } catch (IOException e) {
        System.err.println(e.getMessage());
        throw new RuntimeException("      !");

    } finally {
        if (fileReader != null) {
            try {
                fileReader.close();
            } catch (Exception e) {
                System.err.println(e.getMessage());
                throw new RuntimeException("       ");
            }
        }

        if (fileWriter != null) {
            try {
                fileWriter.close();
            } catch (Exception e) {
                System.err.println(e.getMessage());
                throw new RuntimeException("       ");
            }
        }
    }

    FileReader reader = null;

    try {
        reader = new FileReader("test.txt");
        char[] contentArray = new char[1024];

        int charUnit = 0;
        while ((charUnit = reader.read(contentArray)) != -1) {
            System.out.println(new String(contentArray, 0, charUnit));
        }

    } catch (IOException e) {
        throw new RuntimeException("       ");

    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                throw new RuntimeException("       ");
            }
        }
    }

좋은 웹페이지 즐겨찾기