1. 程式人生 > >javaSE-IO補充 功能流物件(序列化和瞬態關鍵字)

javaSE-IO補充 功能流物件(序列化和瞬態關鍵字)

	/*
		 * 列印流: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 (標記介面);


能操縱物件的流物件