package com.example.helloandroid;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
@SuppressWarnings("deprecation")
/*
실습 8-1을 실행시, 해당 날짜 일기가 있어도 나오지 않는다.
처음 실행할 때부터 그날의 일기가 있다면 에디트텍스트에 일기를 보여주고,
버튼이 <수정하기>가 되게 한다.
일기가 없으면 에디트텍스트에 '일기없음' 힌트가 나오고, 버튼은 <새로저장>이
되게 한다
우선, pc바탕화면에서 초기의 데이트피커에 설정된 날짜에 해당하는 메모장파일을
만들어 내용을 입력 후 저장 한 다음,
안드로이드 스튜디오의 해당 응용프로그램(진행 중인 프로젝트)의
내장 메모리(data/data/패키지명/files)에 만들어둔 파일을 업로드합니다.
코드를 보면, 실습 코드의 init메소드는 데이트 피커의 초기값을 설정해주고
날짜 변경리스너를 포함하기 때문에 초기화 메소드전에 아래와 같은
코드를 작성하여 최초 실행 시 기본으로 설정되어있는 데이트피커의 날짜 값에
해당하는 메모장이 있을 경우 에디트텍스트로 출력할 수 있게 합니다.
*/
public class MainActivity extends AppCompatActivity {
String filename;
DatePicker dp;
Button btnWrite;
EditText edtDiary;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("간단 일기장");
dp = (DatePicker) findViewById(R.id.datePicker);
btnWrite = (Button) findViewById(R.id.btnWrite);
edtDiary = (EditText) findViewById(R.id.edtDiary);
Calendar cal = Calendar.getInstance();
int cYear = cal.get(Calendar.YEAR);
int cMonth = cal.get(Calendar.MONTH);
int cDay = cal.get(Calendar.DAY_OF_MONTH);
String filename1 = Integer.toString(cYear) + "_" + Integer.toString
(cMonth + 1) + "_" + Integer.toString(cDay) + ".txt";
String str1 = readDiary(filename1);
edtDiary.setText(str1);
btnWrite.setEnabled(true);
dp.init(cYear, cMonth, cDay, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker datePicker,
int i, int i1, int i2) {
filename = Integer.toString(i) + "_" + Integer.toString(i1 + 1)
+ "_" + Integer.toString(i2) + ".txt";
String str = readDiary(filename);
edtDiary.setText(str);
btnWrite.setEnabled(true);
}
});
btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
FileOutputStream outfs = openFileOutput(filename,
Context.MODE_PRIVATE);
String str = edtDiary.getText().toString();
outfs.write(str.getBytes());
outfs.close();
Toast.makeText(getApplicationContext(), filename +
"이 저장됨", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
String readDiary(String fName) {
String diaryStr=null;
FileInputStream inFs;
try {
inFs=openFileInput(fName);
byte[] txt= new byte[500];
inFs.read(txt);
inFs.close();
//읽어온 txt를 문자열로 변경 후, trim()메소드를 통해
//앞뒤의 공백 제거, 반환할 dairyStr에 대입.
//현재는 일기가 있는 상태이므로, 화면 버튼 글자를
//수정하기로 변경
diaryStr=(new String(txt)).trim();
btnWrite.setText("수정하기");
}
catch(FileNotFoundException e)
{
edtDiary.setHint("일기 없음");
btnWrite.setText("새로 저장");
}
catch(IOException e){
//일기가 있다면 일기 내용 반환, 없다면 새로저장으로 변경
e.printStackTrace();
}
//일기 파일 있다면 일기 내용이 반환, 없다면 null이 반환될 것
return diaryStr;
}
}
/*
파일을 직접 보는 방법: 오른쪽 아래의 Device File EXPLORER탭 클릭.
DATA-DATA-com.cookandroid.profect..-files 확장시, 생성한 일기파일 목록이 보임
*/
'동방프로젝트' 카테고리의 다른 글
실습, 직풀 8-2) (0) | 2020.08.17 |
---|---|
sd카드 작업 1 (0) | 2020.08.16 |
실습8-1) 간단한 일기장 앱 (2) | 2020.08.16 |
실습 7-3)사용자 정보 입력 앱 및 직풀 (0) | 2020.08.16 |
실습 7-3)사용자 정보 입력 앱 (2) | 2020.08.16 |