[안드로이드/android] 텍스트 파일을 이용한 간단한 메모 앱 만들기
텍스트 파일 입출력을 이용해서 간단한 메모앱 만들기
간단히 사용자가 입력한 텍스트를 저장하고 불러올 수 있는 메모장 앱을 구현하기.
메모를 입력할 수 있는 에디트텍스트와 하나의 텍스트를 저장하고, 불러오고, 삭제하는 세 가지 버튼이 배치된다.
res/layout/activity_main.xml - 레이아웃 파일
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<LinearLayout
android:id="@+id/btn_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="horizontal">
<Button
android:id="@+id/load_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="불러오기"
android:onClick="onClick"/>
<Button
android:id="@+id/save_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="저장"
android:onClick="onClick"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="삭제"
android:onClick="onClick"/>
</LinearLayout>
<EditText
android:id="@+id/memo_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/btn_layout"
android:hint="메모할 내용을 입력하세요."
android:gravity="top"
android:background="@android:drawable/edit_text"/>
</RelativeLayout>
src/TextFileManager.java - 메모(파일 관리하는 함수)
public class TextFileManager {
private static final String FILE_NAME = "Memo.txt";
// 메모 내용을 저장할 파일 이름
Context mContext = null;
public TextFileManager(Context context) {
mContext = context;
}
// 파일에 메모를 저장하는 함수
public void save(String strData) {
if( strData == null || strData.equals("") ) {
return;
}
FileOutputStream fosMemo = null;
try {
// 파일에 데이터를 쓰기 위해서 output 스트림 생성
fosMemo = mContext.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
// 파일에 메모 적기
fosMemo.write( strData.getBytes() );
fosMemo.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 저장된 메모를 불러오는 함수
public String load() {
try {
// 파일에서 데이터를 읽기 위해서 input 스트림 생성
FileInputStream fisMemo = mContext.openFileInput(FILE_NAME);
// 데이터를 읽어 온 뒤, String 타입 객체로 반환
byte[] memoData = new byte[fisMemo.available()];
while (fisMemo.read(memoData) != -1) { }
return new String(memoData);
} catch (IOException e) { }
return "";
}
// 저장된 메모를 삭제하는 함수
public void delete() {
mContext.deleteFile(FILE_NAME);
}
}
src/MainActivity.java
public class MainActivity extends AppCompatActivity {
EditText mMemoEdit = null;
TextFileManager mTextFileManager = new TextFileManager(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMemoEdit = (EditText) findViewById(R.id.memo_edit);
}
public void onClick(View v) {
switch (v.getId()) {
// 1. 파일에 저장된 메모 텍스트 파일 불러오기
case R.id.load_btn: {
String memoData = mTextFileManager.load();
mMemoEdit.setText(memoData);
Toast.makeText(this, "불러오기 완료", Toast.LENGTH_LONG).show();
break;
}
// 2. 에디트텍스트에 입력된 메모를 텍스트 파일로 저장하기
case R.id.save_btn: {
String memoData = mMemoEdit.getText().toString();
mTextFileManager.save(memoData);
mMemoEdit.setText("");
Toast.makeText(this, "저장 완료", Toast.LENGTH_LONG).show();
break;
}
// 3. 저장된 메모 파일 삭제하기
case R.id.delete_btn: {
mTextFileManager.delete();
mMemoEdit.setText("");
Toast.makeText(this, "삭제 완료", Toast.LENGTH_LONG).show();
}
}
}
}