看完第一章 集合 結合書中代碼 稍微修改做個小練習:
E盤根目錄下 table.txt内容:
C001 程式設計基礎 4 蔣建設
C002 微機原理與應用 5 張鋼
C003 高等數學 6 李明
C004 離散數學 5 趙學會
C005 世界近代史 2 陳曉
課程表類:
package com.chujianyun.com;
public class Table
{
private String key;
private String rest;
public Table()
{
}
public Table(String key, String rest)
super();
this.key = key;
this.rest = rest;
public String getKey()
return key;
public void setKey(String key)
public String getRest()
return rest;
public void setRest(String rest)
@Override
public boolean equals(Object obj)
{
return key.equals(((Table)obj).key);
public String toString()
return "Table [key=" + key + ", rest=" + rest + "]";
}
檔案操作類:
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.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
public class FileOperator
private static String filePath = "E:\\table.txt";
public static Set<Table> readFile( )
Set<Table> set = new LinkedHashSet<Table>();
File file = new File(filePath);
BufferedReader bf = null;
try {
bf = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
String str,key,rest;
Table tbl =null;
while((str=bf.readLine())!=null)
{
key = str.substring(0,4);
rest = str.substring(5);
tbl = new Table(key,rest);
set.add(tbl);
}
} catch (FileNotFoundException e) {
System.out.println("沒有找到檔案!");
//e.printStackTrace();
}catch(IOException e) {
System.out.println("打開或者通路檔案異常"+e.getMessage());
}finally
try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return set;
public static void writeFile(Set<Table> set)
File file = new File(filePath);
BufferedWriter bw = null;
//Table tbl = null;
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GBK"));
for(Table tbl:set)
bw.write(tbl.getKey()+" "+tbl.getRest()+"\r\n");
bw.flush();
System.out.println("打開或者通路檔案異常"+e.getMessage());
}finally
{
try {
bw.close();
} catch (IOException e) {
System.out.println("寫緩沖流關閉異常"+e.getMessage());
public static void select()
System.out.println("\n-----------------------------------------");
System.out.println("輸入編号進行功能選擇:");
System.out.println("1:根據課程号查找課程;");
System.out.println("2:根據課程号删除課程:");
System.out.println("3:向課程表裡面追加一個課程記錄:");
System.out.println("4:顯示課程表裡面所有課程記錄");
System.out.println("5:修改課程表裡面的課程記錄");
System.out.println("-1:退出");
System.out.println("-----------------------------------------");
System.out.print("功能選擇:");
//根據 key 和 SET查找
public static Table findTable(String key,Set<Table> tbls)
for(Table tbl : tbls)
if(tbl.getKey().equals(key))
{
return tbl;
}
return null;
public static void findTableInput(Set<Table> tbls,Scanner in)
String input ="";
System.out.print("請輸入要查找的課程表:");
input =in.next();
Table tbl = findTable(input, tbls);
if(tbl==null)
System.out.println("沒有找到該課程号對應的課程表");
}else
System.out.println("對應的課程表為:"+tbl);
public static void editTableInput(Set<Table> tbls,String input)
String key = input.substring(0,4);
String rest = input.substring(5);
for(Table tbl:tbls)
if(tbl.getKey().equals(key))
tbl.setRest(rest);
System.out.println("修改編号為["+key+"]的課程成功!");
public static void editTableInput(Set<Table> tbls,Scanner in)
System.out.print("請輸入要修改的課程表:");
input=in.nextLine();
editTableInput(tbls,input);
public static void deleteTable(String key,Set<Table> tbls)
Table tblRemove = findTable(key, tbls);
if(tblRemove!=null)
tbls.remove(tblRemove);
writeFile(tbls);
System.out.println("删除編号為:["+key+"]的課程成功!");
System.out.println("未檢索到,課程編号:["+key+"]對應的課程,删除失敗!");
public static void deleteTableInput(Set<Table> tbls,Scanner in)
System.out.print("請輸入要删除的課程表:");
deleteTable(input, tbls);
public static void addTable(Set<Table> tbls,Scanner in)
String input="";
System.out.print("請輸入要添加的課程表:");
input=in.nextLine();
tbls.add(new Table(key,rest));
writeFile(tbls);
System.out.print("添加課程表:"+key+"成功!");
public static void printTables(Set<Table> tbls)
System.out.println(tbl);
測試類:
public class SetDemo {
public static void main(String[] args)
Set<Table> tbls = FileOperator.readFile();
/* for(Table tbl:tbls)
}*/
Scanner in = new Scanner(System.in);
FileOperator.select();
int choice =0;
while((choice =in.nextInt())!=-1)
switch(choice)
case -1: System.exit(0); break;
case 1:
FileOperator.findTableInput(tbls,in); break;
case 2:
FileOperator.deleteTableInput(tbls,in);break;
case 3:
FileOperator.addTable(tbls,in);break;
case 4:
FileOperator.printTables(tbls); break;
case 5:
FileOperator.editTableInput(tbls, in); break;
default:
System.out.println("輸入的數字錯誤請重新輸入");
FileOperator.select();
效果:
-----------------------------------------
輸入編号進行功能選擇:
1:根據課程号查找課程;
2:根據課程号删除課程:
3:向課程表裡面追加一個課程記錄:
4:顯示課程表裡面所有課程記錄
5:修改課程表裡面的課程記錄
-1:退出
功能選擇:4
Table [key=C001, rest=程式設計基礎 4 蔣建設]
Table [key=C002, rest=微機原理與應用 5 張鋼]
Table [key=C003, rest=高等數學 6 李明 ]
Table [key=C004, rest=離散數學 5 趙學會]
Table [key=C005, rest=世界近代史 2 陳曉]
Table [key=C006, rest=資料結構(JAVA版) 8 王凱]
功能選擇:2
請輸入要删除的課程表:C006
删除編号為:[C006]的課程成功!
功能選擇:1
請輸入要查找的課程表:C005
對應的課程表為:Table [key=C005, rest=世界近代史 2 陳曉]
功能選擇:3
請輸入要添加的課程表:C006 中國近代史 1 林沖
添加課程表:C006成功!
Table [key=C006, rest=中國近代史 1 林沖]
功能選擇:5
請輸入要修改的課程表:C006 JAVA程式設計 8 林沖
修改編号為[C006]的課程成功!
Table [key=C006, rest=JAVA程式設計 8 林沖]
功能選擇:-1