sitelink1 https://m.blog.naver.com/wow2778/221006603656 
sitelink2  
sitelink3  

1. 파일 입출력

기존에 저장된 파일을 불러오는 방법은
  1. 내장메모리(스마트폰의 저장소)
  2. 외장메모리(SD카드의 저장소)
에서 불러 올수있습니다.

1-1. 통신 방식
먼저 Stream 방식은 데이터를 Byte단위로 통신하며
FileInputStream/FileOutputStream
BufferedInputStream/BufferedOutputStream
를 통해서 가능합니다.

다음으로 Reader,Writer 방식은 문자 단위로 통신을 하며
FileReader/FileWriter
BufferedReader/BufferedWriter
을 통해서 가능합니다.

위의 Stream과 Reader,Writer는 파일 입출력을 위한 통신뿐만 아니라 서버와의 통신에도
사용가능하니 후에 참고하시길 바랍니다.

1-2. 내장메모리 통신
이제 내장메모리의 파일을 입출력 하는것을 알아보겠습니다.
내장메모리는 안드로이드의 data/data/패키지에 데이터가 저장됩니다.
마시멜로우(6.0) 이후로는 보안문제로 접근이 힘듭니다만 가능은 합니다.
먼저 파일이 저장되는 경로는 getFileDir()을 통해 받아오실 수 있습니다.
또한 Cache file의 경우는 getCacheDir()을 통해서 가능하십니다.

try { BufferedWriter bw = new BufferedWriter( new FileWriter(getFilesDir() +"test.txt", true)); bw.write("들어갈 내용입니다."); bw.close(); } catch (IOException e) { e.printStackTrace(); }

먼저 파일을 쓰기위해서 BufferedWriter bw를 선언해줍니다.
그리고 bw.write를 통해 넣을 내용을 입력해주신후 bw.close로 닫아주시면 저장이됩니다.
주의할점은 반드시 try catch로 구현을 해야하며 사용해주시지 않으면 오류가 날것입니다.

try { BufferedReader br = new BufferedReader( new FileReader(getFilesDir() +"test.txt")); String readStr = ""; String str = null; while((str = br.readLine()) != null) readStr += str +"\n"; br.close(); Toast.makeText(this, readStr.substring(0, readStr.length()-1),Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

다음으로는 읽기입니다.
getFilesdir()을 통해서 저장소 위치를 받아오고 파일이름을 붙임으로써 가져올 파일을 지정합니다.
그리하여 str으로 파일의 내용을 받아오신후
내용이 비어있는 지점까지 읽어오시면됩니다.

1-3. raw폴더 파일처리

raw폴더 파일처리는 안드로이드 스튜디오에서 res/raw폴더에
파일을 저장해주시고 읽어들이는 것입니다. 만약 없으시면 폴더를 만들어 주시면 됩니다.

getResources getResources().openRawResource openRawResource(R.raw.파일이름)

하여 위의 소스처럼 R.raw.파일이름으로 접근하셔서 가져오시면 됩니다.

1-4. 외장메모리 통신

외장메모리와의 통신에서 가장 중요한점은 반드시 권한을 받으셔야 합니다.
마시멜로우 미만 버전에서는 AndroidManifest.xml에 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

만 입력해주시면 ?지만
마시멜로우부터는 별도의 권한을 받기 위한 코딩을 해 줘야 합니다.

다음으로 디렉토리(경로)를 만드실때는
String path =getExternalPath();
File file = new File(path + "디렉토리이름");
file.mkdir(); 즉 mkdir을 통해서 하시면 됩니다.

아래는 getExternalPath()의 일부 내용입니다.

String sdPath = ""; String ext = Environment.getExternalStorageState(); if(ext.equals(Environment.MEDIA_MOUNTED)) { sdPath =Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; //sdPath = "/mnt/sdcard/";

외장 메모리의 주소는 위의 sdpath이며 위의 메소드들을 통해서 얻으실 수 있습니다.
경로를 제외한 write와 close는 내장메모리와 동일하니 따로 설명은 생략하겠습니다.

2. 실습 10

내장메모리에서 기존에 있던 데이터를 불러옵니다.
그리고 5월 21일 이라는 메모파일과 5월 21일이라는 내용으로 파일을 생성합니다.


5월 21일을 저장해서 리스트뷰에 추가되고 파일에도 추가됩니다.
물론 삭제도 가능합니다(롱아이템클릭리스너로 구현했습니다.)
하여 5월 19일을 삭제하여 2개만 남게되었습니다.

 

이제 5월 21일을 누르면 안의 내용이 나오고 수정으로 글씨가 바뀝니다.
그리하여 날짜를 바꾸고 수정을 하시면 기존의 21일은 삭제되고 20일만 남게됩니다.
만약 새로운 날짜를 등록할때 이미 그 날짜가 존재하면 중복 저장이 아닌 수정으로 넘어가게 됩니다.

저장소 주소
https://github.com/seon6565/File-Input-output

번호 제목 글쓴이 날짜 조회 수
48 [안드로이드 웹뷰] 파일 시스템으로 부터 HTML 로딩 황제낙엽 2018.08.21 87
47 내부 저장소 접근 함수 API 와 실제 저장소 경로 황제낙엽 2018.08.21 85
46 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-06 file 황제낙엽 2018.08.19 991
45 안드로이드 파일 객체 생성자 황제낙엽 2018.08.19 90
» 파일 입출력(내장 메모리, 외장메모리) 황제낙엽 2018.08.19 720
43 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-05 황제낙엽 2018.08.19 132
42 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-04 file 황제낙엽 2018.08.12 1711
41 뷰 캡처하여 이미지 파일로 저장하기(SD카드로 화면 캡처)-03 file 황제낙엽 2018.08.12 150
40 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-02 황제낙엽 2018.08.12 133
39 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-01 황제낙엽 2018.08.12 86
38 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-00 황제낙엽 2018.08.12 109
37 [HttpURLConnection] 서버와 세션 유지 황제낙엽 2018.08.12 58
36 [HttpURLConnection] 세션 관리 황제낙엽 2018.08.12 27
35 이미지 크기 변경(Image resize) file 황제낙엽 2018.08.09 108
34 Emulator: audio: Failed to create voice `adc' 황제낙엽 2018.08.06 1007
33 install_failed_invalid_apk file 황제낙엽 2018.08.06 49
32 Image to byte Array (바로 사용가능한 JPEG 파일) 황제낙엽 2018.07.24 612
31 안드로이드 스튜디오(Android Studio) 최적화 file 황제낙엽 2018.02.07 433
30 Android Studio for beginners, Part 4: Advanced tools and plugins (2) file 황제낙엽 2018.02.02 14
29 Android Studio for beginners, Part 4: Advanced tools and plugins (1) file 황제낙엽 2018.02.02 26