1. 문자열 바이트 배열 변환 : 문자열을 파일로 저장할 때에는 바이트 배열로 변환한 후 저장해야 하고, 문자열을 바이트 배열로 변환하려면 String 클래스의 getByte() 메소드를 사용해야 한다. byte[] getBytes() 기능 : 바이트 배열로 변환 변환값 : 바이트 배열
2. 바이트 배열의 문자열 변환 : 바이트 배열을 파일로부터 읽은 후 문자열로 번달하려면 String 클래스의 생성자를 사용한다. String(byte[] data) 기능 : String 클래스의 생성자 인수 : data 바이트 배열
String(byte[] data, String encoding) 기능 : String 클래스 생성자 인수 : data 바이트 배열 encoding 인코딩 - 인코딩은 [UTF-8]을 지정.
3. 파일 출력 스트림의 개방 : 스트림의 바이트 배열을 파일로 쓰려면, 파일 출력 스트림을 열고 쓰기 처리를 한 후 마지막으로 닫는다. 파일 출력 스트림을 열려면 Context 클래스의 openFileOutput()메소드를 사용한다. OutputStream openFileOutput(String fileName, int mode)
기능 : 파일의 열기
인수 : fileName 파일명 mode 모드 반환값 : 출력 스트림 : 파일명으로는 저장할 파일명을 지정한다. 절대경로는 /data/data/패키지명/files/파일명 이 된다. 모드는 다음의 정수를 지정한다. 여기서는 Contenxt.MODE_PRIVATE 로 파일 생성을 했다.
모드
기능
Context.MODE_APPEND
기존 파일 단말기로부터 추가 쓰기
Context.MODE_PRIVATE
다른 어플리케이션으로부터는 접근불가
Context.MODE_WORLD_READABLE
다른 어플리케이션으로부터 읽기 가능
Context.MODE_WORLD_WRITEABLE
다른 어플리케이션으로부터 쓰기 가능
4. 바이트 배열의 쓰기 : 바이트 배열을 출력 스트림에 쓰려면 OutputStream 클래스의 write() 메소드를 사용한다. void write(byte[] data, int off, int len) 기능 : 바이트 데이터 data의 off 번째부터 len 만큼 쓰기 인수 : data 바이트 데이터 off 데이터의 시작 위치 len 쓰기 바이트 수 void write(byte[] data)
기능 : 바이트 데이터 data의 모든 데이터 쓰기
인수 : data 바이트 데이터 void write(int data)
기능 : 1 바이트의 바이트 데이터 쓰기
인수 : data 바이트 데이터( 0 ~ 255 )
: 인수는 int 형이지만, 0 ~ 255 값만을 지정한다.
5. 파일 출력 스트림의 닫기 : 파일 출력 스트림을 닫으려면 OutputStream 클래스의 close() 메소드를 사용한다. void close()
기능 : 출력 스트림 닫음
6. 파일 입력 스트림의 개방 : 스트림의 개방 파일로부터 바이트 배열을 읽으려면 파일 입력 스틀미을 열고 읽기 처리를 실행한 후 마지막으로 닫는다. 파일입력 스트림을 열려면 Context 클래스의 openFileInput() 메소드를 사용한다. OutputStream openFileInput(String fileName, int mode)
기능 : 파일 입력 스트림의 열기
인수 : fileName 파일명 mode 모드
7. 바이트 배열의 읽기 : 바이트 배열의 읽기를 실행하려면 InputStream 클래스의 read() 메소드를 사용한다. int read(byte[] data)
기능 : 바이트 배열의 읽기
인수 : data 바이트 배열 반환값 : 읽은 바이트 크기 : 인수로 전달한 바이트 배열에 읽은 데이터가 저장되고, 반환값에는 읽은 바이트 크기가 전달된다. 단, 바이트 배열보다 큰 바이트 데이터는 읽을 수 없다. 거기에서 읽은 바이트크기가 0이 될 때까지 read() 메소드를 반복하여 호출하면서 가변 길이 바이트 배열 ByteArrayOutputStream 클래스에 쓰고 있다.
8. 파일 입력 스트림의 닫기 : 파일 입력 스트림을 닫기 위해서는 Input Stream 클래스의 close() 메소드를 사용한다. void close()
기능 : 파일 입력 스트림의 닫기
9. ByteArrayOutputStream 객체의 바이트 배열화 : ByteArrayOutputStream 객체에서 갖고 있는 바이트 데이터를 byte[] 형의 값으로 얻으려면 ByteArrayOutputStream 클래스의 toByteArray() 메소드를 사용한다. byte[] toByteArray()
기능 : 바이트 배열 구하기 반환값 : 바이트 배열
* DDMS 의 File Explorer : DDMS의 File Explorer 를 사용하면, 저장되어 있는 파일을 확인 할 수 있다. 1. Eclipse 메뉴중 [Window]-[Open Perspective]-[DDMS] 를 선택. 2. Devices 에서 단말기를 선택한다(에뮬레이터의 경우는 emulator-XXXX). 3. File Explorer 에서 [data]-[data]-[패키지명]-[files]-[파일명] 을 선택. 4. 우측 위의 [Pull a file from the device] 버튼을 통해 파일 대화상자를 열고 파일을 컴퓨터에 저장할수 있다. [Put File on Device] 버튼을 통해 컴퓨터로부터 파일을 추가할 수 있고, [삭제] 버튼을 통해 파일 삭제도 가능하다.
public class FileEx extends Activity implements View.OnClickListener{ private EditText editText; private Button btnWrite; private Button btnRead;
// 초기화 @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE);
// 레이아웃 생성 LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.rgb(255, 255, 255)); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout);
// 텍스트 박스의 생성 editText = new EditText(this); editText.setText("", EditText.BufferType.NORMAL); setLLParams(editText, 240, 50); layout.addView(editText);
// 쓰기 버튼의 생성 btnWrite = new Button(this); btnWrite.setText("쓰 기"); btnWrite.setOnClickListener(this); setLLParams(btnWrite); layout.addView(btnWrite);
// 읽기 버튼의 생성 btnRead = new Button(this); btnRead.setText("읽 기"); btnRead.setOnClickListener(this); setLLParams(btnRead); layout.addView(btnRead); }
// 파일 -> 바이트 데이터 private static byte[] file2data(Context context, String fileName) throws Exception{ int size; byte[] w = new byte[1024]; InputStream in = null; ByteArrayOutputStream out = null;
try {
// 파일 입력 스트림의 개방 (6) in = context.openFileInput(fileName);
// 바이트 배열의 읽기 (7) out = new ByteArrayOutputStream(); while(true){ size = in.read(w); if (size <= 0) break; out.write(w, 0, size); } out.close();