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

번호 제목 글쓴이 날짜 조회 수
128 단말기 고유값 구하는 방법들 황제낙엽 2019.03.03 11739
127 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-04 file 황제낙엽 2018.08.12 1711
126 고유 식별자의 모범 사례 (Android Developers) 황제낙엽 2019.03.03 1106
125 Emulator: audio: Failed to create voice `adc' 황제낙엽 2018.08.06 1007
124 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-06 file 황제낙엽 2018.08.19 991
123 HTTP 프로토콜을 이용한 Json Post 보내고 받기 file 황제낙엽 2017.08.03 816
122 Error:Execution failed for task ':app:lintVitalRelease'. 황제낙엽 2018.01.29 783
» 파일 입출력(내장 메모리, 외장메모리) 황제낙엽 2018.08.19 720
120 HttpURLConnection 에서 세션 유지하기(쿠키 사용) 황제낙엽 2017.08.03 661
119 [성공샘플] HttpURLConnection 을 이용하여 JSON 데이터 보내기 예제 황제낙엽 2018.11.10 649
118 Image to byte Array (바로 사용가능한 JPEG 파일) 황제낙엽 2018.07.24 612
117 STT 학습 링크 모음 (sample link) 황제낙엽 2018.10.11 552
116 ABI 관리 황제낙엽 2017.03.28 535
115 TTS 를 위한 스마트폰 설정 및 TTS 샘플 file 황제낙엽 2019.02.16 460
114 안드로이드 스튜디오(Android Studio) 최적화 file 황제낙엽 2018.02.07 433
113 android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유 황제낙엽 2019.04.26 322
112 동적 레이아웃 생성과 자동 줄바꿈 구현 file 황제낙엽 2018.12.26 311
111 Android - Actionbar에 tab을 추가하고 스와이프 동작으로 화면 전환 구현( ViewPager와 FragmentPagerAdapter 사용) file 황제낙엽 2017.09.11 308
110 안드로이드 두지점(위도,경도) 사이의 거리 file 황제낙엽 2017.01.25 257
109 안드로이드 기기 식별 방법 - UUID(Universally unique identifier) 황제낙엽 2019.03.03 234