Programming/Android

[Java] 안드로이드 파일 처리의 기본

mj73 2021. 7. 2. 14:33

안드로이드에서 파일을 읽고 쓰는 방법에는

1) java에서 제공하는 파일 관련 클래스를 이용하는 방법

2) 안드로이드에서 제공하는 파일 관련 클래스를 사용하는 방법

두 가지가 있다.


 

 

1. 내장 메모리 파일 처리

앱을 종료했다가 재실행할때 사용했던 곳부터 이어서 작업하고 싶은 경우.

내장 메모리의 저장 위치는 /data/data/패키지명/files 폴더 이다.


1) openFileOutput() / openFilleinput()으로 파일 열기

2) read()/ write()로 파일 읽기/쓰기

3) close()로 파일 닫기

순으로 내장 메모리에서 파일을 처리한다.

 

 

 

//내장 메모리에 파일을 쓰는 코드


FileOutputStream outFs = openFileOutput("file.txt", Context.MODE_PRIVATE);
//파일을 쓰기 모드로 연다. 파일 경로는 /data/data/패키지명/files/file.txt이다.
//MODE_PRIVATE는 현재 앱에서만 사용할 수 있게 한다는 것.

String str= "내장 메모리 테스트";
outFs.write(str.getBytes());
//문자열을 파일에 쓰는데, getBytes()로 문자열을 byte[]로 변경해야한다.

outFs.close();
//파일 닫기

 

//내장 메모리에서 파일을 읽어 보여주는 코드


FileInputStream inFs = openFileInput("file.txt");
//내장 메모리의 /data/data/패키지명/files/file.txt 파일을 읽어온다.

byte[] txt = new byte[30]; //byte[]형의 변수 txt를 선언
inFs.read(txt); //읽어온 데이터를 저장
String str = new String(txt); //txt를 문자열로 변환

Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
//문자열로 변환한 것을 토스트로 보여줌

inFs.close();
//파일을 닫음

 

 

 

 


 

2. 읽기 전용 파일인 경우

읽기 전용이고, 쓰기는 할 수 없다.

 

/res/raw 폴더를 생성하고 사용할 파일을 넣어두면 된다.

 

접근 방법은 openRawResource() 메소드를 사용 해야 한다.

FileInputStream 클래스 대신 InputStream() 클래스를  사용한다.

 

//raw 폴더에 raw_test.txt 파일이 있다고 가정.


InputStream inputS = getResources().openRawResource(R.raw.raw_test);
//getResources()는 현재 패키지의 리소스를 반환한다.
//openRawResource()는 /res/raw 파일을 읽기 전용으로 연다.
//반환은 InputSream 형이다.

byte[] txt = new byte[inputS.available()];
//.available()은 입력 스트림에서 읽을 수 있는 바이트 수를 반환한다. 
//raw_test.txt의 크기만큼 txt가 할당 된다.

inputS.read(txt); //데이터를 읽어와서 txt에 저장
edtRaw.setText(new String(txt); //txt변수를 문자열로 변환

inputS.close();

 

 

 

 

 


3. SD카드의 파일 처리

 

1) 에뮬레이터 실행 후 Android Studio 화면의 오른쪽 부분에 [Device File Explorer]에서 /sdcard 폴더

2) /storage/emulated/0 폴더

둘 중 한 곳에 적절한 텍스트 파일을 업로드 한다.

 

 

 

 

SD카드를 사용하기 위한 권한 부여

AndroidManifest.mxl에 <application 위와 안쪽에 다음 두 행을 넣어야 한다.

<uses-permiission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
  android:requestLegacyExternalStorage="true"

 

 

 

SD카드에서 파일 읽기 코드

ActivityCompat.requestPermissions(this, new String[] {android.Manifest.permission.WRITE_EXTERNAL_STORAGE},MODE_PRIVATE);
FileInputStream inFs = new FileInputStream("/storage/emulated/0/sd_test.txt");
byte[] txt = new byte[inFs.available()];
inFs.read(txt);
edtSD.setText(new String(txt));
inFs.close();

 

 

 

SD카드에 폴더 및 파일 생성과 삭제

final String strDpath = Environment.getExternalStorageDirectory().getAbsolutePath();
//SD카드의 절대 경로를 돌려준다.
final File myDir = new File(strSDpath + "/mydir");
//sd카드 경로 아래에 myDir 폴더를 생성하기 위해 File형 변수 설정


myDir.mkdir(); //폴더 생성
myDir.delete(); //폴더 삭제