-
안드로이드: 파일 입출력을 통해 간단한 일기장을 만들어보자!안드로이드 스튜디오 2020. 9. 22. 16:04
파일 입출력을 이용해서 간단한 일기장을 만들어 보았다.
원하는 날짜에 글을 기록하고 수정할 수 있다.
<xml 파일>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <DatePicker android:layout_width="match_parent" android:layout_height="wrap_content" android:datePickerMode="spinner" //spinner 버전으로 android:id="@+id/datepicker" android:calendarViewShown="false"/> <EditText android:layout_margin="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit_text" android:lines="10" /> <Button android:enabled="false" // 날짜를 선택하기 전엔 버튼을 쓸 수 없도록 android:layout_width="match_parent" android:layout_height="wrap_content" android:text="저장" android:id="@+id/button"/> </LinearLayout>
<MainActivity.java>
package org.techtown.iostream; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CalendarView; import android.widget.DatePicker; import android.widget.EditText; import android.widget.Toast; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Date; public class MainActivity extends AppCompatActivity { Button button; //저장버튼 DatePicker datePicker; // 날짜를 선택하는 위젯 EditText editText; // 글을 기록하는 부분 String filename; //파일 입출력을 위해 저장할 파일이름 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("간단 일기장"); button = findViewById(R.id.button); datePicker = findViewById(R.id.datepicker); editText = findViewById(R.id.edit_text); // datePicker를 현재날짜로 초기화해주기 위해 오늘의 년, 월, 일을 받아온다. Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); // datepicker를 오늘의 날짜로 초기값을 정해준다. datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() { // datepicker에서 날짜가 바뀔때마다 파일이름을 정해준다 // readDiary메소드를 통해 파일이 존재하면 파일의 내용을 가져오고 // 그렇지 않다면 null을 가져온다. @Override public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) { filename = Integer.toString(i) + "_" + Integer.toString(i1) + "_" + Integer.toString(i2); String str = readDiary(filename); editText.setText(str); button.setEnabled(true); } }); //파일 생성, 쓰기단계 //editText에 적혀있는 내용의 byte값을 가져와 //파일에 쓰기한다. button.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { try { FileOutputStream outFs = openFileOutput(filename, Context.MODE_PRIVATE); String str = editText.getText().toString(); outFs.write(str.getBytes()); outFs.close(); Toast.makeText(MainActivity.this, filename + "이 저장", Toast.LENGTH_SHORT).show(); button.setText("수정하기"); } catch (IOException e) { e.printStackTrace(); } } }); } // 파일 읽기 단계 // 기록을 하지 않은 경우도 있으니 파일이 없는 경우도 있다. // try catch를 통해 파일이 없는경우는 Hint를 띄워준다. String readDiary(String filename){ String diaryStr = null; FileInputStream inFs; try { //파일이 있는경우 inFs = openFileInput(filename); byte[] txt = new byte[500]; inFs.read(txt); inFs.close(); diaryStr = (new String(txt)).trim(); button.setText("수정하기"); }catch (IOException e){ // 파일이 없는 경우 editText.setHint("일기 없음"); button.setText("새로 저장"); } return diaryStr; } }
반응형'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드: 간단 그림판 만들기!(Canvas, Paint 클래스 사용하기) (0) 2020.09.23 안드로이드: xml파일 만들어서 사용하기 (대화상자, 토스트메시지 커스텀) (0) 2020.09.22 안드로이드 스튜디오: 여러 버튼 하나로 처리하기 onClick method (0) 2020.09.10 안드로이드 스튜디오 Video 앨범 만들고 Video를 실행해보자 (2) (0) 2020.05.23 안드로이드 스튜디오 유용한 단축키! 알아보자! (1) 2020.05.23