java 板


LINE

※ 引述《kako0507 (...)》之銘言: : 不好意思請問一下各位 : 我想要覆寫一個文字檔案(不會更動到原本的資料直接加入在最後) : 但是我在很多物件裡面都會更動到這個檔案 所以要new很多次 : 問題來了 每new一次file就完全洗掉之前的資料 : 要怎麼做才可以不動到原本的資料直接加入在最後呢? : PS.我用的是PrintWriter 猶豫了很久不知道該不該回這篇 (ci) 雖然說直接給答案只要兩行就解決, 不過我實在是不喜歡這樣, 所以我只好試試看能不能把它解釋清楚了, 如果有什麼地方沒解釋清楚或誤用, 還請各位多多指教。 --- Java 的 stream 類別很多,讓人目不暇給 FileInputStream, FileOutputStream, FileReader, FileWriter 光是 File 開頭的就有這四種, 其他開頭的還有 Object, Data, Print, Buffered.... 還有兩個 InputStreamReader 和 OutputStreamWriter 這兩個奇怪東西, 到底我該用的是什麼? 它們之間又有什麼差別? 先從 Reader/Writer 和 InputStream/OutputStream 說起好了, Reader 是讀,InputStream 也是讀, 兩著乍看之下都是在做讀資料, 其間差別究竟何在? 根據 API 上的說法,InputStream 是以 byte 為單位, 而 Reader 則是以字元為單位,並且會根據編碼 decode。 OutputStream 與 Writer 的部分當然也是相同。 再來討論這些 streams 的另一個差別, 在前面所提到的所有類別中, 只有 File 開頭類別的沒有 "以其它 Stream 類別為參數" 的 Constructor。 (以下就只以 OutputStream 為例) 這是因為只有 FileOutputStream 是直接在跟 File 溝通, 其他的 Stream 都只是將資料寫入 Constructor 參數中的 OutputStream。 那麼,我們為什麼不只用 FileOutputStream 就好? 你可以去看看 FileOutputStream 提供了哪些 method, 會發現它只提供了有關 byte array 的操作, 如果你想要輸出一行字給這 Stream,你可能會自己處理得很辛苦。 所以啦,Java 提供了一系列好用的 Stream, 把最底層,只提供 byte array 操作的 Stream 包裝起來, 讓你操作起來更直覺, 因此想要寫入字串可以用 PrintStream, 想要把各種基本資料型態, 如 int, double...等的 "值" 輸出,可以用 DataOutputStream。 想要把整個物件 Serialize,則可以用 ObjectOutputStream。 或許你有注意到, PrintWriter 也有提供檔名和 File 物件做為 Constructor 的參數呀! 但這只是為了你使用上的方便, 實際上 PrintWriter 還是會自己宣告一份 FileOutputStream 與檔案溝通。 而 InputStreamReader 和 OutputStreamWriter, 則是用來將 Stream 包裝成 Reader/Writer, 並且由這兩個物件做編碼的處理。 另外,這些包裝是可以多層的, 例如 ObjectOutputStream -> BufferedOutputStream -> FileOutputStream, 或著 PrintWriter -> OutputStreamWriter -> FileOutputStream。 (以上只是舉例) 如果你想要惡搞, 用 ObjectOutputStream 去包裝 DataOutputStream, 甚至是 ObjectOutputStream -> ObjectOutputStream -> ObjectOutputStream -> .... 這樣在宣告與執行上也不會有問題。 (這樣也算是錯誤,不過這是程式邏輯上的錯誤) 講了這麼多,我想我終於可以回答你的問題了! PrintWriter 要如何做出附加檔案的效果? 因為它只是一個包裝住其他 Stream 的...呃...還是 Stream, 它連寫入的東西最後透過網路傳出去,還是寫入檔案都不知道, 最底層的檔案操作根本不關它的事呀! 所以呢,想要設定成檔案寫入附加在後, "請去參考 FileOutputStream 的 API"。 --- 板主,來個妹吧! (呃...我是說來個 m 吧) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.13.37 ※ 編輯: tkcn 來自: 61.230.13.37 (05/30 01:19)
1F:推 kako0507:謝謝~~~~ 05/30 01:24
2F:推 james732:推 這篇對我的幫助很大 05/30 01:39
3F:推 ogamenewbie:光 m 沒推文其實... 05/30 11:14
4F:推 IsMe1086:推啊~整體觀念有更清楚了 05/30 11:48
5F:→ tkcn:光有妹沒推...會怎麼樣嗎 @_@ 05/30 12:40
6F:推 h5u:好清純啊 啊...是好清楚 05/30 12:46
7F:推 TonyQ:關鍵字:要咩 05/30 14:37
8F:推 csihcs:謝謝大大清楚的解說^^ 05/30 17:07
9F:推 chaostorm:推 05/30 21:26
10F:推 owlman:推~ 06/02 11:01
11F:推 youko:大大好威!!! 06/03 08:51
12F:推 tomap41017:推!! 10/14 00:17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP