編輯:Android開發實例
在上篇中,已經寫下了IO流概念以及對File類操作,. 此文是它的姊妹篇!本文以Demo為主,不會涉及太多概念!!!
輸出流代碼:
- static void demo0() throws Exception {
- try (OutputStream outputStream = new FileOutputStream("demo1.txt")) {
- outputStream.write("First 'demo' for how to use 'OutputStream' !"
- .getBytes());
- }
- System.out.println("Over");
- }
看到這段代碼,是不是感覺有點奇怪?別緊張.
輸入流代碼:
- static void demo1() throws IOException{
- InputStream inputStream =null;
- try {
- inputStream = new FileInputStream("demo0.txt");
- byte[] bb = new byte[1024]; //緩沖區
- int temp;
- while((temp=inputStream.read(bb))!=-1){
- System.out.println(new String(bb, 0, temp));
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(inputStream!=null){
- inputStream.close();
- }
- }
- }
InputStream:
Reader,Writer與InputStream,OutputStream基本功能相,這裡就不在解釋。深入理解了InputStream與OutputStream之後,學其它就很快;對於不同的處理流,查API就行!!
附上IO流體系結構表:
BufferWriter
對象 ObjectInputStream ObjectOutputStream 轉換 InputStreamReader OutputStreamWriter 打印 PrintStream PrintWriter 字符串 StringReader StringWriter 管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
這多類,該如何記憶,理解呢? 我是這麼理解的。
首先把它們大致劃分為:節點流與處理流。節點流就是直接與物理節點,進行交互;而處理流通常直接處理的對象是節點流,是再上一層的包裝。
比如:如果想對read操作進行同步緩沖,可以使用BufferedInputStream:
- static void demo2() throws Exception{
- InputStream inputStream =null;
- BufferedInputStream bufferedInputStream =null;
- try {
- inputStream = new FileInputStream("demo0.txt");
- bufferedInputStream = new BufferedInputStream(inputStream);
- byte[] bb = new byte[1024];
- int temp=-1;
- while((temp=bufferedInputStream.read(bb))!=-1){
- System.out.println(new String(bb,0,temp));
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(inputStream!=null){
- inputStream.close();
- }
- }
- }
RandomAccessFile: 任意訪問內容類:既可以讀取文件內容,也可以向文件輸出數據,可以自由訪問文件的任意位置,它可以自由定位文件記錄指針。
二個重要方法:
使用RandomAccessFile 必須要設置模式:
- static void demo3() throws Exception{
- RandomAccessFile file = new RandomAccessFile("demo0.txt", "rw");
- System.out.println("Before invoke write:"+file.getFilePointer());
- file.seek(file.length());
- file.write("\nUsing RandomAccessFile Class".getBytes());
- System.out.println("After invoke write:"+file.getFilePointer());
- file.seek(0);
- byte[] bb = new byte[1024];
- int temp=-1;
- while ((temp=file.read(bb))>0) {
- System.out.println(new String(bb,0,temp));
- }
- file.close();
- }
如果要在指定的位置進行插入內容,那必須得把指定位置的內容進行緩存,不然會被替代。
- static void demo4(String fileName,long position,String content) throws Exception{
- RandomAccessFile file = new RandomAccessFile(fileName, "rws");
- File tempFile = File.createTempFile("temp", null);
- long currentLength = file.length();
- if(position>currentLength){
- return;
- //Maybe you can setup position=currentLenght; Also you can setup anything what you want !!!
- }
- FileOutputStream fileOutputStream = new FileOutputStream(tempFile); // write data to "temp" file
- FileInputStream fileInputStream = new FileInputStream(tempFile); // read data
- byte[] bb = new byte[512];
- int tempNum=-1;
- file.seek(position);
- while((tempNum=file.read(bb))>0){
- fileOutputStream.write(bb, 0, tempNum);
- }
- file.seek(position); // Go back to position
- file.write(content.getBytes());
- while((tempNum=fileInputStream.read(bb))>0){
- file.write(bb, 0, tempNum);
- }
- tempFile.deleteOnExit();
- if(fileInputStream!=null){
- fileInputStream.close();
- }
- if(fileOutputStream!=null){
- fileOutputStream.close();
- }
- file.close();
- }
Android性能優化-布局優化 今天,繼續Android性能優化 一 編碼細節優化。 編碼細節,對於程序的運行效率也是有很多的影響的。今天這篇主題由於
本文主要講解Android應用程序簽名相關的理論知識,包括:什麼是簽名、為什麼要給應用程序簽名、如何給應用程序簽名等。 1、什麼是簽名? &
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放