자바 IO 스 트림 파일 의 읽 기와 쓰기 구체 적 인 인 인 스 턴 스

머리말:
자바 IO 흐름 에 대한 조작 은 매우 흔히 볼 수 있 습 니 다.기본적으로 모든 항목 을 사용 합 니 다.만 날 때마다 인터넷 에서 찾 아 보면 됩 니 다.여러 번 시도 해 보면 불쾌 합 니 다.지난번 에 갑자기 한 동료 가 저 에 게 자바 파일 을 읽 으 라 고 물 었 습 니 다.저 는 갑자기 멍 해 졌 습 니 다.첫 번 째 반응 은 바로 인터넷 에서 찾 는 것 입 니 다.찾 을 수 있 지만 항상 든든 하지 않 습 니 다.그래서 오늘 시간 을 내 서 자바 IO 흐름 의 조작 을 보 았 습 니 다.수확 이 있 는 것 같 습 니 다.그리고 자 료 를 정리 해서 나중에 더 공부 할 수 있 도록 하 겠 습 니 다.
IO 흐름 의 분류:1.흐름 의 데이터 대상 에 따라 나 뉜 다.고급 흐름:모든 메모리 의 흐름 은 고급 흐름 이다.예 를 들 어 InputStreamReader  저급 흐름:모든 외부 장치 의 흐름 은 저급 흐름 입 니 다.예 를 들 어 InputStream,OutputStream 은 어떻게 구분 합 니까?모든 흐름 대상 의 접미사 에 Reader 나 Writer 를 포함 하 는 것 은 모두 고급 흐름 입 니 다.반대로 대체적으로 저급 흐름 이지 만 예외 도 있 습 니 다.예 를 들 어 PrintStream 은 고급 흐름 입 니 다.
2.데이터 의 흐름 에 따라 나 누 기:출력 흐름:데 이 터 를 쓰 는 것 이 고 프로그램(메모리)->외부 장치 의 입력 흐름:데 이 터 를 읽 는 것 이 며 외부 장치->프로그램(메모리)에서 어떻게 구분 합 니까?일반적으로 입력 흐름 은 Input 이 있 고 출력 흐름 은 Output 이 있 습 니 다. 
3.스 트림 데이터 의 형식 에 따라 바이트 흐름:소리 나 그림 등 바 이 너 리 데이터 의 흐름 을 처리 합 니 다.예 를 들 어 InputStream 문자 흐름:텍스트 데이터(예 를 들 어 txt 파일)의 흐름 을 처리 합 니 다.예 를 들 어 InputStreamReader  어떻게 구분 합 니까?높 은 저급 흐름 으로 구분 할 수 있 습 니 다.모든 저급 흐름 은 바이트 흐름 이 고 모든 고급 흐름 은 문자 흐름 입 니 다.
4.흐름 데이터 의 포장 과정 에 따라 원시 흐름:실례 화 흐름 의 대상 이 되 는 과정 에서 다른 흐름 을 자신의 구조 방법 으로 하 는 매개 변수의 흐름 으로 들 어 갈 필요 가 없 으 며 원시 흐름 이 라 고 부른다.포장 흐름:실례 화 흐름 의 대상 을 하 는 과정 에서 다른 흐름 을 자신의 구조 방법 으로 매개 변 수 를 보 내 는 흐름 으로 전달 해 야 하 는데 이 를 포장 흐름 이 라 고 한다.어떻게 구분 합 니까?그래서 저급 류 는 모두 원시 류 이기 때문에 고급 류 는 모두 포장 류 입 니 다.
IO 흐름 대상 의 계승 관계(아래 그림):
다음은 구체 적 인 코드 예 를 살 펴 보 겠 습 니 다.
바이트 로 파일 읽 기

public class ReadFromFile {
    /**
     * , , 、 、 。
     */
    public static void readFileByBytes(String fileName) {
        File file = new File(fileName);
        InputStream in = null;
        try {
            System.out.println(" , :");
            //
            in = new FileInputStream(file);
            int tempbyte;
            while ((tempbyte = in.read()) != -1) {
                System.out.print(tempbyte);
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        try {
            System.out.println(" , :");
            //
            byte[] tempbytes = new byte[100];
            int byteread = 0;
            in = new FileInputStream(fileName);
            ReadFromFile.showAvailableBytes(in);
            // ,byteread
            while ((byteread = in.read(tempbytes)) != -1) {
                System.out.print(tempbytes, 0, byteread);
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e1) {
                }
            }
        }
    }
문자 로 파일 읽 기

  /**
     * , ,
     */
    public static void readFileByChars(String fileName) {
        File file = new File(fileName);
        Reader reader = null;
        try {
            System.out.println(" , :");
            //
            reader = new InputStreamReader(new FileInputStream(file));
            int tempchar;
            while ((tempchar = reader.read()) != -1) {
                // windows ,\r
, 。
                // , 。
                // , \r,
。 , 。
                if (((char) tempchar) != '\r') {
                    System.out.print((char) tempchar);
                }
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(" , :");
            //
            char[] tempchars = new char[30];
            int charread = 0;
            // ,
            reader = new InputStreamReader(new FileInputStream(fileName));
            // ,charread
            while ((charread = reader.read(tempchars)) != -1) {
                // \r
                if ((charread == tempchars.length)
                        && (tempchars[tempchars.length - 1] != '\r')) {
                    System.out.print(tempchars);
                } else {
                    for (int i = 0; i < charread; i++) {
                        if (tempchars[i] == '\r') {
                            continue;
                        } else {
                            System.out.print(tempchars[i]);
                        }
                    }
                }
            }

        } catch (Exception e1) {
            e1.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }

줄 별로 파일 읽 기

  /**
     * ,
     */
    public static void readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        try {
            System.out.println(" , :");
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            int line = 1;
            // , null
            while ((tempString = reader.readLine()) != null) {
                //
                System.out.println("line " + line + ": " + tempString);
                line++;
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }
한 파일 의 내용 을 다른 파일 에 쓰기(줄 에 따라 쓰기)

public class FileTest {
public static void main(String[] args)   {
 File  file=new File("c:\\test.txt");
 BufferedReader read=null;
 BufferedWriter writer=null;
 try {
   writer=new BufferedWriter(new  FileWriter("c:\\zwm.txt"));
 } catch (IOException e1) {
  e1.printStackTrace();
 }
 try {
   read=new BufferedReader(new  FileReader(file));
   String tempString = null;
   while((tempString=read.readLine())!=null){
    writer.append(tempString);
    writer.newLine();//
    writer.flush();// ,
   }
   read.close();
   writer.close();
   System.out.println(" ...");
 } catch (IOException e) {
  e.printStackTrace();
 }

}
}

좋은 웹페이지 즐겨찾기