一:程序框架圖
二:代碼詳情
package notepad;
import java.awt.im.spi.InputMethod;
import java.io.FileNotFoundException;
import java.io.FilePermission;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/*
* 模擬記事本
*/
public class Notepad {
//文件路徑
private static String fillPath;
//文件內容
private static String message="";
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("--1:新建文件 2:文件打開 3:修改文件 4:保存 5:退出--");
System.out.println("請輸入指令");
int command=scanner.nextInt();
switch (command) {
case 1:
//創建文件
createFile();
break;
case 2:
//打開文件
openFile();
break;
case 3:
//修改文件
editFile();
break;
case 4:
//保存文件
saveFile();
break;
case 5:
//退出
exit();
break;
default:
System.out.println("你輸入的指令錯誤!");
break;
}
}
}
/*
* 退出文件
*/
private static void exit() {
// TODO Auto-generated method stub
System.out.println("你已經退出系統,謝謝使用!");
System.exit(0);
}
/*
* 保存文件
*/
private static void saveFile() throws IOException {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
FileWriter out=null;
if (fillPath!=null) {
out=new FileWriter(fillPath);
}else{
System.out.println("請輸入文件保存的絕對路徑:");
String path=scanner.next();
fillPath=path;
if (!fillPath.toLowerCase().endsWith(".txt")) {
fillPath+=".txt";
}
out=new FileWriter(fillPath);
}
out.write(message);
out.close();
message="";
fillPath=null;
}
/*
* 修改文本內容
*/
private static void editFile() {
// TODO Auto-generated method stub
if (message.isEmpty()&&fillPath==null) {
System.out.println("請先新建文件或者打開文件");
return;
}
Scanner scanner=new Scanner(System.in);
String str="請輸入要修改的內容以(修改的目標文字:修改之後的文字)格式 ,停止修改請輸入\\stop\\:";
System.out.println(str);
String intputMessage="";
while(!intputMessage.equals("stop")){
intputMessage=scanner.nextLine();
if (intputMessage!=null&&intputMessage.length()>0) {
String []editMessage=intputMessage.split(":");
if (editMessage!=null&&editMessage.length>1) {
message=message.replace(editMessage[0], editMessage[1]);
}
}
}
System.out.println("修改後的內容:"+"\r\n"+message);
}
/*
* 打開文件
*/
private static void openFile() throws IOException {
// TODO Auto-generated method stub
message="";
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入打開文件的位置:");
fillPath=scanner.next();
if (fillPath!=null&&!fillPath.endsWith(".txt")) {
System.out.println("請選擇文本文件");
return;
}
FileReader in=new FileReader(fillPath);
char[]charArray=new char[1024];
int len=0;
StringBuffer stringBuffer=new StringBuffer();
while((len=in.read(charArray))!=-1){
stringBuffer.append(charArray);
}
message=stringBuffer.toString();
System.out.println("打開文件內容:"+"\r\n"+message);
in.close();
}
/*
* 創建文件
*/
private static void createFile() {
// TODO Auto-generated method stub
message="";
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入內容,停止編寫請輸入\"stop\":");
StringBuffer stringBuffer=new StringBuffer();
String inputMessage="";
//當輸入stop時,停止輸入
while (!(inputMessage.equals("stop"))) {
if (stringBuffer.length()>0) {
//追加換行符
stringBuffer.append("\r\n");
}
//拼接輸入信息
stringBuffer.append(inputMessage);
//獲取輸入信息
inputMessage=scanner.nextLine();
}
//將輸入內容停止
message=stringBuffer.toString();
}
}
三:運行效果
四:總結
這節課是實戰練習,對前面學習的FileWriter流和FileReader流進行練習,FileWriter和FileReader分別繼承於Writer和Reader類
其實IO流的操作基本上形式一樣
如流的讀取
實例化讀取對象----->通過reader()方法進行讀取—>關閉對象,釋放對象
如流的寫入
實例化寫入對象----->通過writer()方法進行寫入---->關閉對象,釋放對象
模擬記事本主要在保存文件(FileWriter)模塊和打開文件模塊(FileReader)使用到Io流,其他模塊只是通過字符串相應的操作,來實現相應業務(除退出模塊)。