Q
Todoアプリを作成せよ。ファイル書き込みを利用しデータ永続化すること。
[実行例]
****TodoApp****
Todoは1件もありません。
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>1
新規Todoを作成します。
Todo内容を入力してください>ミルクを買う
重要度を1~10(最大)で入力してください>3
1件追加しました。
0・・・ミルクを買う/重要度:3
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>1
新規Todoを作成します。
Todo内容を入力してください>銀行へ行く (預入)
重要度を1~10(最大)で入力してください>10
1件追加しました。
0・・・銀行へ行く (預入)/重要度:10
1・・・ミルクを買う/重要度:3
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>1
新規Todoを作成します。
Todo内容を入力してください>キャットフードを買う
重要度を1~10(最大)で入力してください>5
1件追加しました。
0・・・銀行へ行く (預入)/重要度:10
1・・・キャットフードを買う/重要度:5
2・・・ミルクを買う/重要度:3
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>2
重要度を変更します。番号を入力してください。0~2>2
重要度を再設定してください。>7
重要度を変更しました。
0・・・銀行へ行く (預入)/重要度:10
1・・・ミルクを買う/重要度:7
2・・・キャットフードを買う/重要度:5
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>3
Todoを削除します。番号を入力してください。0~2>2
1件削除しました。
0・・・銀行へ行く (預入)/重要度:10
1・・・ミルクを買う/重要度:7
——操作を入力してください。——
1/登録 2/重要度変更 3/削除 4/終了>4
アプリケーションを終了します。

[作成手順]
1.todoパッケージを作成する。以降のクラスはこのtodoパッケージ内に作成する。
2.一般クラスとしてTodoクラスを作成する。
Todo.java


public class Todo {
	private String todo;
	private int  importance;
	public Todo(String todo,int importance){
		this.setTodo(todo);
		this.setImportance(importance);
	}
	@Override
	public String toString() {
		return this.todo+"/重要度:"+importance;
	}
	public String toCSV(){
		return this.todo+","+importance;
	}
	public String getTodo() {
		return todo;
	}
	public void setTodo(String todo) {
		this.todo = todo;
	}
	public int getImportance() {
		return importance;
	}
	public void setImportance(int importance) {
		if(importance > 10){
			this.importance=10;
		}else if(importance < 1){
			this.importance=1;
		}else{
			this.importance = importance;
		}
	}
}

3.TodoAppクラスを作成し以下のように作成する。
TodoApp.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TodoApp {
	static List<Todo> list=new ArrayList<>();
	static Scanner scan=new Scanner(System.in);
	public static void main(String[] args) {
		File file=new File("todo.csv");
		System.out.println("****TodoApp****");
		if(file.exists()){
			readFile(file);
		}
		while(true){
			showTodo();
			System.out.println("------操作を入力してください------");
			System.out.print("1/登録 2/重要度変更 3/削除 4/終了>");
			int select=scan.nextInt();scan.nextLine();
			switch(select){
			case 1:
				createTodo();
				break;
			case 2:
				alterTodo();
				break;
			case 3:
				deleteTodo();
				break;
			default:
				System.out.println("アプリケーションを終了します。");
				saveFile(file);
				scan.close();
				return;
			}
		}

	}
	private static void deleteTodo() {
		if(list.size()==0){
			System.out.println("まだTodoはありません。");
			return;
		}
		System.out.printf("Todoを削除します。番号を入力してください。%d~%d>", 0,list.size()-1);
		int index=scan.nextInt();
		list.remove(index);
		System.out.println("1件削除しました。");
	}
	private static void alterTodo() {
		if(list.size()==0){
			System.out.println("まだTodoはありません。");
			return;
		}
		System.out.printf("重要度を変更します。番号を入力してください。%d~%d>",0,list.size()-1);
		int index=scan.nextInt();
		System.out.print("重要度を再設定してください。>");
		int importance=scan.nextInt();
		list.get(index).setImportance(importance);
		System.out.println("重要度を変更しました。");
	}
	private static void createTodo() {
		System.out.println("新規Todoを作成します。");
		System.out.print("Todo内容を入力してください>");
		String todo=scan.nextLine();
		System.out.print("重要度を1~10(最大)で入力してください>");
		int importance=scan.nextInt();
		Todo t=new Todo(todo,importance);
		list.add(t);
		System.out.println("1件追加しました。");
		
	}
	public static void showTodo(){
		if(list.size()==0){
			System.out.println("Todoは1件もありません。");
			return;
		}
		for(int i=0;i<list.size()-1;i++){
			for(int j=i+1;j<list.size();j++){
				if(list.get(i).getImportance() < list.get(j).getImportance()){
					Todo temp=list.get(i);
					list.set(i, list.get(j));
					list.set(j, temp);
				}
			}
		}
		for(int i=0;i<list.size();i++){
			System.out.println(i+"・・・"+list.get(i).toString());
		}
	}
	public static void readFile(File file){
		BufferedReader br=null;
		try {
			FileInputStream fis=new FileInputStream(file);
			InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
			br=new BufferedReader(isr);
			String line;
			while((line=br.readLine()) != null){
				String[] data=line.split(",");
				Todo todo=new Todo(data[0],Integer.parseInt(data[1]));
				list.add(todo);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(br != null){
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	public static void saveFile(File file){
		BufferedWriter bw=null;
		try {
			FileOutputStream fos=new FileOutputStream(file);
			OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
			bw=new BufferedWriter(osw);
			for(Todo todo:list){
				bw.append(todo.toCSV());
				bw.newLine();
			}
			bw.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(bw != null){
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}