请使用Java语言在上面代码的基础上进一步优化,在操作页面显示编辑日记和查看日记两个功能选项,将日记信息写入到txt文件之前,需先拼凑好txt文件名,再判断本地是否已存在此文件,这里可通过输入流尝试获取此文件的字节流,如果获取成功,则证明这个文件已存在,那么就通过输出流向文件末尾追加日记信息,如果获取失败,即异常,说明之前并没有生成日记信息,则需要新建此文件
时间: 2023-11-03 22:05:36 浏览: 80
java判断本地文件是否存在.txt
以下是Java语言的代码实现:
```
import java.io.*;
import java.util.*;
public class Diary {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请选择功能:");
System.out.println("1. 编辑日记");
System.out.println("2. 查看日记");
int choice = scanner.nextInt();
scanner.nextLine(); // 消耗掉nextInt()方法留下的回车符
switch (choice) {
case 1:
System.out.println("请输入日记内容:");
String content = scanner.nextLine();
saveDiary(content);
System.out.println("日记已保存!");
break;
case 2:
System.out.println("日记内容如下:");
String diary = readDiary();
System.out.println(diary);
break;
default:
System.out.println("输入有误,请重新选择!");
}
}
}
public static void saveDiary(String content) {
String fileName = getFileName();
try {
FileOutputStream fos = new FileOutputStream(fileName, true); // 追加写入
PrintWriter pw = new PrintWriter(fos);
pw.println(content);
pw.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String readDiary() {
String fileName = getFileName();
StringBuilder sb = new StringBuilder();
try {
FileInputStream fis = new FileInputStream(fileName);
Scanner scanner = new Scanner(fis);
while (scanner.hasNextLine()) {
sb.append(scanner.nextLine()).append("\n");
}
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
public static String getFileName() {
Date date = new Date();
String fileName = "diary_" + (date.getYear() + 1900) + "_" + (date.getMonth() + 1) + "_" + date.getDate() + ".txt";
File file = new File(fileName);
if (file.exists()) {
return fileName;
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
}
```
解释一下代码:
1. `Scanner scanner = new Scanner(System.in);`:创建一个读取用户输入的Scanner对象。
2. `while (true) {...}`:循环,直到用户选择退出程序。
3. `System.out.println("请选择功能:");`:提示用户选择要执行的功能。
4. `int choice = scanner.nextInt();`:读取用户输入的数字,表示要执行的功能。
5. `scanner.nextLine();`:消耗掉nextInt()方法留下的回车符。
6. `switch (choice) {...}`:根据用户选择的功能执行相应的操作。
7. `System.out.println("请输入日记内容:");`:提示用户输入日记内容。
8. `String content = scanner.nextLine();`:读取用户输入的日记内容。
9. `saveDiary(content);`:保存日记到文件中。
10. `System.out.println("日记已保存!");`:提示用户日记已经保存。
11. `String diary = readDiary();`:读取日记文件中的内容。
12. `System.out.println(diary);`:显示日记内容。
13. `public static void saveDiary(String content) {...}`:将日记内容写入到文件中。先调用`getFileName()`方法生成文件名,然后使用FileOutputStream和PrintWriter将日记内容写入到文件末尾。
14. `public static String readDiary() {...}`:读取日记文件中的内容。先调用`getFileName()`方法生成文件名,然后使用FileInputStream和Scanner读取文件中的内容。
15. `public static String getFileName() {...}`:生成日记文件名。使用Date类获取当前日期,拼凑出文件名。如果文件已存在,则返回文件名;否则新建文件,并返回文件名。
阅读全文