生活随笔
收集整理的這篇文章主要介紹了
【Java】格式化的文件I/O
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
定義接口 規范文件操作類型
import java
.util
.List
;
public interface IFileOperation<T> {void add(T object
);void delete(T object
);List
<T> getAll();void update(T object
);}
文本類型數據文件內容:
ID#Code#Name#Classification#Type
1#XXGNK#心血管內科#內科#臨床
2#SJNK#神經內科#內科#臨床
3#PTNK#普通內科#內科#臨床
4#XHNK#消化內科#內科#臨床
5#HXNK#呼吸內科#內科#臨床
6#NFMK#內分泌科#內科#臨床
7#SBNK#腎病內科#內科#臨床
讀寫分析
插入操作,為簡便起見,建議插在末尾。
刪除操作,不建議在遍歷中刪除,因為迭代器遍歷(增強for循環實質上是迭代器)中并發修改會fail-fast,拋出并發修改異常。
修改操作,在循環的時候也是,貌似寫不進去的。
查詢操作,很簡單啦,查就完事。
建議全取出來再處理,畢竟IO真的慢,一直是一邊IO一邊操作也不太現實吧(這可不是數據庫,數據庫有些功能直接在SQL里指定了)。
實現類Mapper
肯定是單例模式啦。
實現上面的接口,給一個類型,實現對應的增刪改查方法。
另外,處理好讀寫格式很重要,其中我用的是多個“+”連接字符串,其實這么多的連接就完全可以用StringBuilder了。
public class DepartmentMapper implements IFileOperation<Department> {private static DepartmentMapper mapper
;private DepartmentMapper() {}public static DepartmentMapper
getInstance() {if (mapper
== null
) {mapper
= new DepartmentMapper();}return mapper
;}@Overridepublic void add(Department object
) {if (object
!= null
) { List
<Department> departmentList
= getAll();for (Department department
: departmentList
) {if (department
.getId().equals(object
.getId())) {return;}}departmentList
.add(object
);writeDepartment(departmentList
);} }@Overridepublic void delete(Department object
) {List
<Department> departmentList
= getAll();Department deleteObj
= null
;for (Department department
: departmentList
) {if (department
.getId().equals(object
.getId())) {deleteObj
= department
;break;}}if (deleteObj
!= null
) {departmentList
.remove(deleteObj
);}writeDepartment(departmentList
);}@Overridepublic List
<Department> getAll() {List
<Department> departmentList
= new ArrayList<>();try (Scanner scanner
= new Scanner(new FileReader(DEPARTMENT_FILENAME
))) {scanner
.nextLine();while (scanner
.hasNextLine()) {String line
= scanner
.nextLine();departmentList
.add(generateDepartment(line
));}} catch (IOException ioe
) {ioe
.printStackTrace();}return departmentList
;}@Overridepublic void update(Department object
) {List
<Department> departmentList
= getAll();Department temp
= null
;for (Department department
: departmentList
) {if (department
.getId().equals(object
.getId())) {temp
= department
;break;}}temp
= object
;writeDepartment(departmentList
);}private void writeDepartment(List
<Department> departmentList
) {try (BufferedWriter tempWriter
= new BufferedWriter(new FileWriter(DEPARTMENT_FILENAME
));BufferedWriter bufferedWriter
= new BufferedWriter(new FileWriter(DEPARTMENT_FILENAME
, true))) { tempWriter
.write("");for (Department department
: departmentList
) {String line
= department
.getId() + SPLIT_CHARACTER
+ department
.getCode() + SPLIT_CHARACTER
+ department
.getName() + SPLIT_CHARACTER
+ department
.getClassification() + SPLIT_CHARACTER
+ department
.getType() + "\n";bufferedWriter
.write(line
);}} catch (IOException ioe
) {ioe
.printStackTrace();}}private Department
generateDepartment(String line
) {String
[] strList
= line
.split(SPLIT_CHARACTER
);int id
= Integer
.parseInt(strList
[0]);String code
= strList
[1];String name
= strList
[2];String classification
= strList
[3];String type
= strList
[4];Department department
= new Department(id
, code
, name
, classification
, type
);return department
;}public Department
getElementByName(String name
) {if (name
== null
) {return null
;}List
<Department> departmentList
= getAll();for (Department department
: departmentList
) {if (name
.equals(department
.getName())) {return department
;}}return null
;}}
總結
以上是生活随笔為你收集整理的【Java】格式化的文件I/O的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。