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(); } } } } }
コメント