Java中無論是將什么樣的數據寫入到文本文件中,都需要利用IO流去操作,我們需要利用java.io包中的類去實現,此中最主要的五個類是File、OutputStream、InputStream、Writer、Reader,我們利用OutputStream、InputStream實現字節的輸入和輸出操作,利用Writer、Reader去實現字符的輸入和輸出操作。這兩組類均為抽象類,可以按照利用場景的分歧利用分歧的實現類。
Java中我們利用流進行數據傳輸,就仿佛在數據源和目標之間成立了一條傳輸管道,我們可以想象一下就像水管一樣。IO流按照處置數據的類型分歧分為字符流和字節省,按照數據的流標的目的分歧可以分為輸入流和輸出流。IO流的分類可以參考下圖,我們將在接下來利用這里面的類。
 接下來我們建立一個TxtUtil東西類,來實現寫入文本文件的方式。下面這個方式是將數據追加寫入到文件文件的末從頭至尾,我們可以看到該方式有兩個參數,List<String>就是我們要寫入的數據,是以不管是什么格局的數據我們都需要轉當作List<String>寫入,fileName是我們要寫入的文件名,若是這個文件不存在的話,下面的方式中new File(fileName)會幫我們建立。以下即是利用輸出了將數據寫入到文件的代碼,注重流在利用后必然要封閉。
/** * 數據追加寫到文件末從頭至尾 * * @param dataList * @param fileName * @return */public static void appendData2File(List<String> dataList, String fileName) { OutputStreamWriter out = null; FileOutputStream fos = null; try { File file = new File(fileName); if (!file.getParentFile().isDirectory()) { file.getParentFile().mkdirs(); } if (!file.exists()) { file.createNewFile(); } // 追加寫入文件,且利用UTF-8格局 fos = new FileOutputStream(fileName, true); out = new OutputStreamWriter(fos, "UTF-8"); for (int dataIndex = 0; dataIndex < dataList.size(); dataIndex++) { out.write(dataList.get(dataIndex)); out.write("\r\n"); } } catch (Exception e) { } finally { try { if (null != out) { out.flush(); out.close(); fos.close(); } } catch (IOException e) { } } }
 我們在持續寫入文本文件時也需要去判定文件的巨細,若是文件過年夜的話,即便文件寫入當作功,打開也要期待很長時候,是以該方式仍是很有需要的。
/** * 按照java.nio.*的流獲取文件巨細 * @param file */ public static long getFileSize(File file){ FileChannel fc = null; try { if(file.exists() && file.isFile()){ FileInputStream fis = new FileInputStream(file); fc = fis.getChannel(); return fc.size(); } } catch (Exception e) { e.printStackTrace(); }finally{ if(null!=fc){ try { fc.close(); } catch (IOException e) { e.printStackTrace(); } } } return 0; }
 東西類已經寫完了,接下來即是若何將HashMap類型的數據寫入到文本文件。我們建立一個Test類,在main方式中建立HashMap,而且放入一些測試數據,將HashMap中的數據轉當作東西類中需要的List<String>類型,然后挪用東西類中的方式將數據寫入文件,最后打印文件的巨細。
public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); map.put("桃子", 10); map.put("噴鼻蕉", 8); map.put("西瓜", 6); List<String> list = new ArrayList<>(); // 遍歷HashMap將數據轉為List<String> for(Map.Entry<String, Object> entry : map.entrySet()) { StringBuilder s = new StringBuilder(); s.append(entry.getKey()) .append(entry.getValue()).append("元"); list.add(s.toString()); } // 將數據寫入到文本文件 String fileName = "E:/test.txt"; TxtUtil.appendData2File(list, fileName); long fileLength = TxtUtil.getFileSize( new File(fileName)); System.out.println(fileLength);}
 運行上面的測試類,我們可以看到在E盤生當作了test.txt文件,我們打開該文件可以看到數據已經當作功寫入了,同時節制臺也打印輸出了文件的巨細,如下圖所示。
 
 0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!