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(); //폴더 삭제