第十一週的做業。
html
目錄
1.本章學習總結
2.Java Q&A
3.碼雲上代碼提交記錄及PTA實驗總結
4.課後閱讀java
1.1 以你喜歡的方式(思惟導圖或其餘)概括總結多流與文件相關內容。git
將Student對象(屬性:int id, String name,int age,double grade)寫入文件student.data、從文件讀出顯示。正則表達式
生成文件大小:48字節編程
屬性 | 字節數 |
---|---|
num | 1 |
name | 4 |
age | 2 |
score | 4 |
分隔符(共三個) | 3 |
行末尾 | 2 |
一行 | 16 |
0字節
由於數據寫到緩衝區上,原來有close()方法自動調用flush()來刷新,可是如今沒有close()了,因此數據在緩衝區上直接丟失了。設計模式
用BufferedReader更快,由於使用緩衝能夠減小IO次數,能夠防止每次讀取時都得進行實際的讀操做。其實Scanner也有緩衝區,可是相比於BufferedReader要小很多。數組
有提高,一樣是由於BufferedWriter使用了緩衝技術瀏覽器
有亂碼,由於FileReader並無實現父類中帶字符集參數的構造函數,只能按系統默認的字符集來解碼。多線程
這樣解決:
app
51字節:一個int4字節,一個double8字節,名字都只有3個字符,再加上正文結束標識符(兩個字符),每一個名字有5個字符,一個字符一字節,每一個名字5個字節。一個學生17個字節,一共三名學生,51字節。
分析數據是這樣存儲的:
0000 000c -> 12
4055 c000 0000 0000 -> 87.50
0003 7177 65 -> qwe
00 0000 0a -> 10
40 52e0 0000 0000 00 -> 75.5
00 0366 6666 -> fff
0000 0008 -> 8
404f 0000 0000 0000 -> 62.0
0003 6376 62 -> cvb
首先使用BufferedReader,使用緩衝技術,讓讀寫更高效!
而後由於要讀UTF-8格式的文件,因此須要用到InputStreamReader,而後輸入流由FileInputStream提供支持。
固然使用Scanner也不錯的。
72字節
屬性 | 字節數 |
---|---|
num | 4 |
name(兩個中文字符) | 6 |
字符串結尾 | 2 |
age | 4 |
score | 8 |
一行 | 24 |
DFS改爲BFS,EZ:
(見題4.3)
稍做改動就能夠刪了
題目是這個意思嗎= =,可是應該用個比較厲害的,好比
String patternDigitString = "[+-]?[0-9]+";
倒數第二張圖:
題目集:多線程(4-4到4-10)
在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
該java.io包中包含不少類可使你的程序用來讀取和寫入數據。大多數類實現順序訪問流。順序訪問流能夠分爲兩類:讀寫字節和讀寫Unicode字符。每一個順序訪問流都具備各自的特性,例如讀取或寫入一個文件,當 讀寫的時候篩選數據,或序列化一個對象。
java.nio.file包爲文件和文件系統I/O提供普遍支持。這是一個很是全面的API,但關鍵切入點以下:
關於NIO.2的更多信息能夠在java.net的OpenJDK:NIO項目網頁中被找到。該網站包括不少NIO.2的本教程沒有說起的功能,如多播,異步I/O,並建立本身的文件系統。
Questions
What class and method would you use to read a few pieces of data that are at known positions near the end of a large file?
想用RandomAccessFile來實現,可是標答說newByteChannel會更好,還沒研究過,有時間看看,這都是nio的東西。
When invoking format, what is the best way to indicate a new line?
%n是相對於\n更好的選擇,由於後者不具備平臺獨立性。
下面關於NIO的我都是先搬過來,後面再深刻了解。
How would you determine the MIME type of a file?
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。MIME_百度百科
Files中的probeContentType()方法用來判斷。
What method(s) would you use to determine whether a file is a symbolic link?
symbolic link符號連接,又稱爲軟連接,是做爲另外一個文件的引用。軟連接對於應用來講是透明的,對於軟連接的操做都會被從新定向到連接的目標文件中去。軟鏈接的刪除對於指向的文件沒有任何影響,可是若是指向的文件被刪除以後,軟連接便會失效。Files類重有isSymbolicLink()來判斷一個文件是不是一個符號連接。
Exercises
Exercise 1. Write an example that counts the number of times a particular character, such as e, appears in a file. The character can be specified at the command line. You can use xanadu.txt as the input file.
String line = null; while ((line = bufferedReader.readLine()) != null) { for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == lookFor) { cnt++; } } } System.out.println(cnt); bufferedReader.close();
Exercise 2. The file datafile begins with a single long that tells you the offset of a single int piece of data within the same file. Write a program that gets the int piece of data. What is the int data?
文件損壞了……
匹配驗證:
//編譯正則表達式 Pattern pattern = Pattern.compile(regex) //CASE_INSENSITIVE表示對大小寫不敏感 Matcher matcher = pattern.matcher(str); // 字符串是否與正則表達式相匹配 return matcher.matches; //()返回一個boolean值,表示是否匹配
字符串中查詢字符或者字符串:
matcher.find()用來查找主串當中是否有包含咱們須要的字符串,若是有包含,咱們就能夠調用matcher.start()和matcher.end()來獲取該匹配字符串的開始和結尾。
看的不過癮的請點下面
回到頂部
又是作的很糙的一次,笑容尬住