본문 바로가기

동방프로젝트

직풀 8-1

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