javaSE-IO補充 功能流物件(序列化和瞬態關鍵字)
阿新 • • 發佈:2019-02-02
/* * 列印流:PrintStream * 特點: * 1,給位元組輸出流提供了列印方法。 * 2,方便列印數值表示形式。 * 3,建構函式接收File物件,字串路徑,OutputStream. */ PrintStream ps = new PrintStream("temp\\ps2.txt"); // ps.write(97);//write寫出一個int,只將最低一個位元組寫出。 // ps.write(353); // ps.print(97); ps.print(353); // 353 --> "353" --> 將數值保持表現形式不變,寫到目的地中。都將資料轉成字串。 ps.close();
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("temp\\pw.txt")),true); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; pw.println(line.toUpperCase()); // pw.flush(); } pw.close(); bufr.close();
序列流
SequenceInputStream對多個流進行合併。
@Test public void demo() throws Exception { /* * 演示序列流。 SequenceInputStream: 特地: 1,將多個源合併成一個源, 2,接收的是一個列舉介面物件。 */ /* 效率太低了 不使用 * Vector<FileInputStream> v = new Vector<FileInputStream>(); v.add(new * FileInputStream("temp\\1.txt")); v.add(new * FileInputStream("temp\\2.txt")); v.add(new * FileInputStream("temp\\3.txt")); */ ArrayList<FileInputStream> al = new ArrayList<FileInputStream>(); for (int x = 1; x <= 3; x++) { al.add(new FileInputStream("temp\\" + x + ".txt")); } Enumeration<FileInputStream> en = Collections.enumeration(al); SequenceInputStream sis = new SequenceInputStream(en); BufferedReader in=new BufferedReader(new InputStreamReader(sis)); BufferedWriter out=new BufferedWriter(new FileWriter("temp/jiangyi.txt")); String line=null; while((line=in.readLine())!=null){ out.write(line); out.newLine(); out.flush(); } out.close(); in.close(); }
/*
* 將一個檔案按照指定的大小進行切割。
* 思路:
* 1,一個輸入流關聯原始檔。
* 2,當緩衝的資料滿足了指定的大小後,則新建一個目的地進行繼續的資料儲存。
* 3,給每一個碎片檔案編號。
*/public static void splitFile(File srcFile) throws IOException {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = null;
byte[] buf = new byte[1024*1024];//建立一個1M的緩衝區。
int len = 0;
int count = 1;
while((len=fis.read(buf))!=-1){
fos = new FileOutputStream(new File("temp\\",(count++)+".part"));
fos.write(buf,0,len);
fos.close();
}
//將原始檔的配置資訊儲存到一個檔案中和碎片檔案在一起。
Properties prop = new Properties();
prop.setProperty("partcount", count+"");
prop.setProperty("srcfilename", srcFile.getName());
fos = new FileOutputStream(new File("temp\\",count+".properties"));
prop.store(fos, "save partfiles info");
fos.close();
fis.close();
}
操作物件(物件序列化)
ObjectInputStream與ObjectOutputStream被操作的物件需要實現Serializable (標記介面);
能操縱物件的流物件