전체 글 101

바이트 기반 스트림 - 파일을 읽어 출력(개선)

파일을 읽어 출력하는 프로그램의 개선 앞에 했던 예제는 효율이 떨어지는 문제가 있다. 효율이 떨어지는 이유는 운영체제에 있다. 우리가 사용하는 운영체제는 하드웨어를 제어하는 기능이 있다. 자바에서 파일을 읽어 들이라고 명령을 내리면, 내부적으로는 운영체제에게 부탁해서 물리적 장치인 하드디스크로부터 읽어오게 된다. 그런데 이 읽어오는 부분에서 몇가지 중요한 점을 고려해야 한다. 자바 프로그래밍으로 1바이트를 읽어오라고 시리행하면, 운영체제는 실제로 1바이트를 읽지 않고 보통 인접한 256바이트나 512바이트를 읽게 된다. 이는 1000바이트의 파일을 1바이트씩 읽어오라고 실행하면, 내부적으로는 512바이트씩 1000번 읽어온다. 이런 문제를 해결하려면 1바이트씩 읽어 들이는 것이 아니라, 운영체제가 실제로..

바이트 기반 스트림 - 파일의 내용을 읽어 들여 화면에 출력

파일의 내용을 읽어 들여 화면에 출력하는 프로그램 import java.io.*; public class FileView { public static void main(String[] args) { if(args.length != 1){ System.out.println("사용법 : java FileView 파일이름"); System.exit(0); } // if end FileInputStream fis = null; try{ fis = new FileInputStream(args[0]); int i = 0; while((i = fis.read()) != -1){ System.out.write(i); } }catch(Exception ex){ System.out.println(ex); }finally{..

바이트 기반 스트림 - FileInputStream과 FileOutputStream

FileInputStream과 FileOutputStream FileInputStream과 FileOutputStream은 각각 InputStream과 OutputStream을 상속받으며, 파일로부터 바이트 단위로 입력받고, 대상 파일에 바이트 단위로 출력할 수 있는 클래스다. FileInputStream과 FileOutputStream의 생성자는 파일명이나 파일 정보가 있는 File 클래스에 대한 객체를 전달받는다. 그리고 FileInputStream의 경우, 생성자에 전달한 파일명이 실제로 존재하지 않는 파일명이면 java.io.FileNotFoundException을 발생시킨다. FileInputStream 생성자 메소드 설명 FileInputStream (String filepath) throws..

바이트 기반 스트림 - System.in을 이용해서 키보드로부터 입력받기

System.in을 이용해서 키보드로부터 입력받기 System.in은 InputStrream 형식이라고 했다. 이는 InputStream에 있는 모든 메소드를 사용할 수 있다. import java.io.*; public class SystemInputTest { public static void main(String[] args) { int i = 0; try { while((i = System.in.read()) != -1){ System.out.write(i); } // while문 종료 } catch (IOException e) { System.out.println(e); } } // main 메소드 종료 } while((i = System.in.read()) != -1){ …… } // whil..

바이트 기반 스트림 - 바이트 단위 IO 클래스, InputStream과 OutputStream

바이트 단위 IO 클래스 바이트 단위 IO 클래스는 가장 기본이 되는 IO 클래스다. 컴퓨터에 존재하는 모든 데이터는 바이트 단위로 구성되어 있기 때문이다. 바이트 스트림 클래스는 모두 추상 클래스(abstractclass)인 InputStream과 OutputSream의 자식(하위) 클래스다. 이는 입력과 관련된 모든 바이트 스트림은 InputStream에 있는 메소드를 포함하며, 출려과 관련된 모든 바이트 스트림은 OutputStream에 있는 메소드를 포함한다. InputStream과 OutputStream InputStream과 OutputStream은 모든 바이트 스트림의 최상위 클래스다. InputStream과 OutputStream 클래스는 추상클래스로서, 바이트 단위로 입출력하기 위한 가장..

바이트 기반 스트림 - File 클래스를 이용한 임시파일의 생성과 삭제

File 클래스를 이용한 임시파일의 생성과 삭제 프로그램을 작성하다 보면 임시로 파일을 생성할 필요하 생긴다. 예를 들어 외부 파일을 이용해서 정렬할 경우가 대표적인 예다. 하지만 문제는 "외부 파일명을 어떻게 정할 것인가?"하는 부분이다. 동일한 이름의 파일이 있을 경우에는 심각한 문제가 발생할 수 있기 때문이다. 이러한 문제점을 해결하기 위해서 File 클래스는 임시 파일을 생성하는 createTempFile()이라는 static한 메소드를 포함하고 있다. createTempFile() 메소드를 이용해서 생성되는 임시 파일의 경우, 파일의 앞 글자와 뒷글자만 사용자가 정의하면 중간의 문자열은 임의 글자로 자동으로 지정된다. 이 경우, 자동으로 생성되는 파일명은 임시 파일이 저장되는 디렉토리에서는 유일..

바이트 기반 스트림 - File 클래스를 이용한 디렉토리의 파일 목록 출력

File 클래스를 이용한 디렉토리의 파일 목록 출력 File 클래스를 이용해서 디렉토리 안의 파일 목록을 출력하는 예제다. 디렉토리 일 경우에는 디렉토리라고 출력하며, 디렉토리가 아닐 경우에는 '파일'이라고 출력한다. 또한 파일의 경우에는 파일 용량도 출력한다. import java.io.*; public class FileList { public static void main(String[] args) { if(args.length != 1){ System.out.println("사용법 : java FileList 디렉토리이름"); System.exit(0); } // if end File f = new File(args[0]); if(!f.exists()){ // 파일의 존재 여부 System.out..

바이트 기반 스트림 - File 클래스를 이용한 파일 삭제

File 클래스를 이용한 파일 삭제 import java.io.*; public class FileDelete { public static void main(String[] args) { if(args.length != 1){ System.out.println("사용법 : java FileDelete 파일이름"); System.exit(0); } // if end File f = new File(args[0]); if(f.exists()){ // 파일의 존재하면 true 존재하지 않으면 false를 반환한다. boolean deleteflag = f.delete(); // 파일을 삭제하면 true 삭제하지 않으면 false를 반환한다. if(deleteflag) System.out.println("파일 ..

바이트 기반 스트림 - File 클래스를 이용한 파일의 정보 구하기

File 클래스를 이용한 파일의 정보 구하기 import java.io.File; import java.io.IOException; public class FileInfo { public static void main(String[] args) { if(args.length != 1){ System.out.println("사용법 : java FileInfo 파일이름"); System.exit(0); } // if end File f = new File(args[0]); if(f.exists()){ // 파일이 존재할 경우 System.out.println("length : "+ f.length()); // 파일의 Byte 크기 System.out.println("canRead :" + f.canRead(..

바이트 기반 스트림 - File 클래스

File 클래스 자바를 만든 썬 마이크로시스템즈는 유닉스 계열 운영체제를 만드는 회사다. 그리고 유닉스 시스템은 디렉토리도 파일로 취급한다. 다만, 파일이나 디렉토리를 담아 둘 수 있는 특수한 용도의 파일로 취급을 하는 것이 다를 뿐이다. File 클래스의 생성자 생성자 설명 File(File parent, String child) parent 디렉토리에 child라는 파일에 대한 File 객체를 생성한다. File(Strign child) child라는 파일에 대한 File 객체를 생성한다. File(String parent, String child) parent 디렉토리에 child라는 파일에 대한 File 객체를 생성한다.※ 참고 : API와는 다르다 (의미는 비슷해서 그냥 나둔다.) File 클래..