본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-05-12안드로이드 스튜디오(파일 입출력)

반응형

자 자바에서 파일 입출력을 배워봤으니 안드로이드에서도 한번 사용해보자 

 

내장 메모리 파일 처리 

@앱을 종료하고 다시 실행할 때 사용한 곳에서 이어서 작업하고 싶은 경우 사용 

@내장 메모리의 저장위치 /data/data/패키지명/files 폴더 

@필터 스트림도 달수 있다.

안드로이드는 직접적인 파일접근을 막아놓은 상태이다. 그런데 개발자들을 위하여 접근하도록 만들어 놓은곳이 위에서 말하는 경로이다. 여기에 접근하는 메소드가 바로 1번이다. 

 

기본적인 파일 입출력에대해서 배워보았으니 바로 실습한거 보면서 이해를 하도록하자 

public class MainActivity extends AppCompatActivity {

    EditText filename, contents;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        filename = findViewById(R.id.editTextTextPersonName);
        contents = findViewById(R.id.editTextTextPersonName2);

        Button btnWrite = findViewById(R.id.button);
        Button btnRead = findViewById(R.id.button2);

        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //에디트 텍스트에 파일 이름 받아오기 
                String name = filename.getText().toString();
                //에디트 텍스트에서 내용 받아오기 
                String content = contents.getText().toString();
                try {
                    //1.(쓰기) 메소드 호출과 동시에 에디트 택스트에서 받은것들 넘겨주기 
                    writeToFile(name, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //1.(읽기) 에디트 텍스트에서 불러올 파일 받아오기
                String name = filename.getText().toString();
                String content = null;
                try {
                    //불러올 파일 이름을 던져주며 메소드 실행 
                    content = readFromFile(name);
                    contents.setText(content);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });


    }

    //파일을 쓰기위한 메소드
    public void writeToFile(String name, String content) throws Exception {
        //2.(쓰기) 자바랑은 다르게 openFileOutput(name, MODE_PRIVATE) 이렇게 사용하는데 
        // 받아온 파일이름넣어주고 쉐어드프리퍼런드때 배웠던것처럼 나만 사용하게 하는 모드이다. 
        FileOutputStream outputStream = openFileOutput(name, MODE_PRIVATE);
        //3.(쓰기) OutputStreamWriter 여기에 위에서 파일 이름 설정을 해줌 
        OutputStreamWriter writer = new OutputStreamWriter(outputStream);
        //실제 내용으로 작성하기 
        writer.write(content);
        //모든것들 종료 해줌 
        writer.flush();
        writer.close();
        outputStream.close();
    }

    //파일을 읽기위한 메소드
    public String readFromFile(String name) throws Exception {
        //2.(읽기) 받아온 이름경로 설정 하고 
        FileInputStream fileInputStream = openFileInput(name);
        //3.(읽기) 버퍼에 연동해주기 
        BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
        //4.(읽기) 스트링 버퍼 생성
        StringBuffer stringBuffer = new StringBuffer();

        String content = null; // 4.(읽기) 리더에서 라인을 받아오는데 받아올게 없을떄까지 반복 
        while ((content = reader.readLine()) != null) {
            stringBuffer.append(content + "\n");
        }
        //사용한것들은 종료 
        reader.close();
        fileInputStream.close();
        //5.(읽기)받아온 정보를 다시 리턴해준다 
        return stringBuffer.toString();
    }
}

코드에 주석을 참조하자~~

그리고 결과를 보면 잘 작동이 된다. 

 

 

그럼 과연 어디에 파일이 저장이 될까? 확인 해보자 위에서 /data/data/패키지명/files 폴더 에 저장 된다고 했는데 확인 해보자 

파일이 많아서 한화면에 안들어 온다.... ㄷ ㄷ 

(그전에 실행 했던 tetx.txt도 있네.. ㅋ ) 보면 이렇게 파일이 들어가서 나중에도 불러와 사용 할 수 있다.  

반응형