日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

安卓学习-其他-文件读写

發(fā)布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓学习-其他-文件读写 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在android中的文件放在不同位置,它們的讀取方式也有一些不同。

本文對android中對資源文件的讀取、數(shù)據(jù)區(qū)文件的讀取、SD卡文件的讀取及RandomAccessFile的方式和方法進行了整理。供參考。

?一、資源文件的讀取:

? ? ? 1) 從resource的raw中讀取文件數(shù)據(jù):?

String res = ""; 
try{ //得到資源中的Raw數(shù)據(jù)流InputStream in = getResources().openRawResource(R.raw.test); //得到數(shù)據(jù)的大小int length = in.available();       byte [] buffer = new byte[length];        //讀取數(shù)據(jù)
    in.read(buffer);         //依test.txt的編碼類型選擇合適的編碼,如果不調(diào)整會亂碼 res = EncodingUtils.getString(buffer, "BIG5"); //關閉    
    in.close();            }catch(Exception e){ e.printStackTrace();         } 

??2) 從resource的asset中讀取文件數(shù)據(jù)?

String fileName = "test.txt"; //文件名字 
String res=""; 
try{ //得到資源中的asset數(shù)據(jù)流InputStream in = getResources().getAssets().open(fileName); int length = in.available();         byte [] buffer = new byte[length];        in.read(buffer);            in.close();res = EncodingUtils.getString(buffer, "UTF-8");     }catch(Exception e){ e.printStackTrace();         } 

?二、讀寫/data/data/<應用程序名>目錄上的文件:?

//寫數(shù)據(jù)
public void writeFile(String fileName,String writestr) throws IOException{ try{ FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE); byte [] bytes = writestr.getBytes(); fout.write(bytes); fout.close(); } catch(Exception e){ e.printStackTrace(); } 
} //讀數(shù)據(jù)
public String readFile(String fileName) throws IOException{ String res=""; try{ FileInputStream fin = openFileInput(fileName); int length = fin.available(); byte [] buffer = new byte[length]; fin.read(buffer);     res = EncodingUtils.getString(buffer, "UTF-8"); fin.close();     } catch(Exception e){ e.printStackTrace(); } return res; }   

?三、讀寫SD卡中的文件。也就是/mnt/sdcard/目錄下面的文件 :?

//寫數(shù)據(jù)到SD中的文件
public void writeFileSdcardFile(String fileName,String write_str) throws IOException{ try{ FileOutputStream fout = new FileOutputStream(fileName); byte [] bytes = write_str.getBytes(); fout.write(bytes); fout.close(); }catch(Exception e){ e.printStackTrace(); } } //讀SD中的文件
public String readFileSdcardFile(String fileName) throws IOException{ String res=""; try{ FileInputStream fin = new FileInputStream(fileName); int length = fin.available(); byte [] buffer = new byte[length]; fin.read(buffer);     res = EncodingUtils.getString(buffer, "UTF-8"); fin.close();     } catch(Exception e){ e.printStackTrace(); } return res; 
} 

?四、使用File類進行文件的讀寫:?

//讀文件
public String readSDFile(String fileName) throws IOException {  File file = new File(fileName);  FileInputStream fis = new FileInputStream(file);  int length = fis.available(); byte [] buffer = new byte[length]; fis.read(buffer);     res = EncodingUtils.getString(buffer, "UTF-8"); fis.close();     return res;  
}  //寫文件
public void writeSDFile(String fileName, String write_str) throws IOException{  File file = new File(fileName);  FileOutputStream fos = new FileOutputStream(file);  byte [] bytes = write_str.getBytes(); fos.write(bytes); fos.close(); 
} 

?五、另外,File類還有下面一些常用的操作:?

String Name = File.getName();  //獲得文件或文件夾的名稱:
String parentPath = File.getParent();  //獲得文件或文件夾的父目錄
String path = File.getAbsoultePath();//絕對路經(jīng)
String path = File.getPath();//相對路經(jīng) 
File.createNewFile();//建立文件  
File.mkDir(); //建立文件夾  
File.isDirectory(); //判斷是文件或文件夾
File[] files = File.listFiles();  //列出文件夾下的所有文件和文件夾名
File.renameTo(dest);  //修改文件夾和文件名
File.delete();  //刪除文件夾或文件

?六、使用RandomAccessFile進行文件的讀寫:?

RandomAccessFile的使用方法比較靈活,功能也比較多,可以使用類似seek的方式可以跳轉(zhuǎn)到文件的任意位置,從文件指示器當前位置開始讀寫。
它有兩種構造方法
new RandomAccessFile(f,"rw");//讀寫方式
new RandomAccessFile(f,"r");//只讀方式
使用事例:?

/* * 程序功能:演示了RandomAccessFile類的操作,同時實現(xiàn)了一個文件復制操作。 */  import java.io.*;  public class RandomAccessFileDemo {  public static void main(String[] args) throws Exception {  RandomAccessFile file = new RandomAccessFile("file", "rw");  // 以下向file文件中寫數(shù)據(jù)  file.writeInt(20);// 占4個字節(jié)  file.writeDouble(8.236598);// 占8個字節(jié)  file.writeUTF("這是一個UTF字符串");// 這個長度寫在當前文件指針的前兩個字節(jié)處,可用readShort()讀取  file.writeBoolean(true);// 占1個字節(jié)  file.writeShort(395);// 占2個字節(jié)  file.writeLong(2325451l);// 占8個字節(jié)  file.writeUTF("又是一個UTF字符串");  file.writeFloat(35.5f);// 占4個字節(jié)  file.writeChar('a');// 占2個字節(jié)  
  file.seek(0);// 把文件指針位置設置到文件起始處  // 以下從file文件中讀數(shù)據(jù),要注意文件指針的位置  System.out.println("——————從file文件指定位置讀數(shù)據(jù)——————");  System.out.println(file.readInt());  System.out.println(file.readDouble());  System.out.println(file.readUTF());  file.skipBytes(3);// 將文件指針跳過3個字節(jié),本例中即跳過了一個boolean值和short值。  
  System.out.println(file.readLong());  file.skipBytes(file.readShort()); // 跳過文件中“又是一個UTF字符串”所占字節(jié),注意readShort()方法會移動文件指針,所以不用加2。  
  System.out.println(file.readFloat());  //以下演示文件復制操作  System.out.println("——————文件復制(從file到fileCopy)——————");  file.seek(0);  RandomAccessFile fileCopy=new RandomAccessFile("fileCopy","rw");  int len=(int)file.length();//取得文件長度(字節(jié)數(shù))  byte[] b=new byte[len];  file.readFully(b);  fileCopy.write(b);  System.out.println("復制完成!");  }  
}  

?七、讀取資源文件時能否實現(xiàn)類似于seek的方式可以跳轉(zhuǎn)到文件的任意位置,從指定的位置開始讀取指定的字節(jié)數(shù)呢?

答案是可以的。

在FileInputStream和InputStream中都有下面的函數(shù):

public long skip (long byteCount); //從數(shù)據(jù)流中跳過n個字節(jié)
public int read (byte[] buffer, int offset, int length); //從數(shù)據(jù)流中讀取length數(shù)據(jù)存在buffer的offset開始的位置。offset是相對于buffer的開始位置的,不是數(shù)據(jù)流。

?可以使用這兩個函數(shù)來實現(xiàn)類似于seek的操作,請看下面的測試代碼:?

//其中read_raw是一個txt文件,存放在raw目錄下。
//read_raw.txt文件的內(nèi)容是:"ABCDEFGHIJKLMNOPQRST"
public String getRawString() throws IOException {String str = null;InputStream in = getResources().openRawResource(R.raw.read_raw);int length = in.available();byte[] buffer = new byte[length];in.skip(2); //跳過兩個字節(jié)in.read(buffer,0,3); //讀三個字節(jié)
    in.skip(3); //跳過三個字節(jié)in.read(buffer,0,3); //讀三個字節(jié)//最后str="IJK"str = EncodingUtils.getString(buffer, "BIG5");in.close();return str;
}

?從上面的實例可以看出skip函數(shù)有點類似于C語言中的seek操作,但它們之間有些不同。?

需要注意的是:

1、skip函數(shù)始終是從當前位置開始跳的。在實際應用當中還要再判斷一下該函數(shù)的返回值。

2、read函數(shù)也始終是當前位置開始讀的。

3、另外,還可以使用reset函數(shù)將文件的當前位置重置為0,也就是文件的開始位置。?

如何得到文件的當前位置?

我沒有找到相關的函數(shù)和方法,不知道怎么樣才能得到文件的當前位置,貌似它也并不是太重要。

?八、如何從FileInputStream中得到InputStream??

public String readFileData(String fileName) throws IOException{ String res=""; try{ FileInputStream fin = new FileInputStream(fileName); InputStream in = new BufferedInputStream(fin);...}catch(Exception e){ e.printStackTrace(); }}

?九、APK資源文件的大小不能超過1M,如果超過了怎么辦?我們可以將這個數(shù)據(jù)再復制到data目錄下,然后再使用。復制數(shù)據(jù)的代碼如下:?

    public boolean assetsCopyData(String strAssetsFilePath, String strDesFilePath){boolean bIsSuc = true;InputStream inputStream = null;OutputStream outputStream = null;File file = new File(strDesFilePath);if (!file.exists()){try {file.createNewFile();Runtime.getRuntime().exec("chmod 766 " + file);} catch (IOException e) {bIsSuc = false;}}else{//存在return true;}try {inputStream = getAssets().open(strAssetsFilePath);outputStream = new FileOutputStream(file);int nLen = 0 ;byte[] buff = new byte[1024*1];while((nLen = inputStream.read(buff)) > 0){outputStream.write(buff, 0, nLen);}//完成} catch (IOException e) {bIsSuc = false;}finally{try {if (outputStream != null){outputStream.close();}if (inputStream != null){inputStream.close();}} catch (IOException e) {bIsSuc = false;}}return bIsSuc;}    

轉(zhuǎn)載時請注明出處:http://blog.csdn.net/ztp800201/article/details/7322110


總結:

?

1、apk中有兩種資源文件,使用兩種不同的方式進行打開使用。
raw使用InputStream in = getResources().openRawResource(R.raw.test);
asset使用InputStream in = getResources().getAssets().open(fileName);

這些數(shù)據(jù)只能讀取,不能寫入。更重要的是該目錄下的文件大小不能超過1M。

同時,需要注意的是,在使用InputStream的時候需要在函數(shù)名稱后加上throws IOException。

2、SD卡中的文件使用FileInputStream和FileOutputStream進行文件的操作。
3、存放在數(shù)據(jù)區(qū)(/data/data/..)的文件只能使用openFileOutput和openFileInput進行操作。
注意不能使用FileInputStream和FileOutputStream進行文件的操作。
4、RandomAccessFile類僅限于文件的操作,不能訪問其他IO設備。它可以跳轉(zhuǎn)到文件的任意位置,從當前位置開始讀寫。

5、InputStream和FileInputStream都可以使用skip和read(buffre,offset,length)函數(shù)來實現(xiàn)文件的隨機讀取。

轉(zhuǎn)載于:https://www.cnblogs.com/weijj/p/4195787.html

總結

以上是生活随笔為你收集整理的安卓学习-其他-文件读写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热免费在线 | 91欧美日韩国产 | 亚洲不卡在线视频 | 性激烈视频在线观看 | 国产精品视频网址 | 日本美女影院 | 最新理伦片eeuss影院 | 国产精品久久久久久免费观看 | 男人日女人b视频 | 成人看片在线观看 | 欧美肥老妇视频 | 熟女一区二区三区四区 | 国产农村妇女毛片精品久久 | 日韩国产欧美视频 | 一及黄色大片 | 91深夜视频| www.亚洲欧美 | 男人操女人视频网站 | 男女交性视频播放 | 久久精品免费网站 | 先锋av资源 | 国产成人小视频在线观看 | 成人在线观看黄色 | 欧美一级免费观看 | 欧美一二三区在线观看 | 国内少妇毛片视频 | 好吊一区二区三区 | 午夜国产在线观看 | 国产中年熟女高潮大集合 | 亚洲第三区 | av福利在线观看 | 亚洲一区你懂的 | xx69欧美| 秋霞午夜 | 在哪里可以看毛片 | 亚洲精品~无码抽插 | 91在线网址 | 鲁大师私人影院在线观看 | 亚洲av综合色区 | 国产女厕一区二区三区在线视 | 视频在线看 | 久久久夜色精品亚洲 | 欧美黄在线| 精品国产乱码久久久 | 蜜桃视频一区二区在线观看 | 午夜天堂在线 | 中国女人和老外的毛片 | 91草草草| 99久久99久久精品免费看蜜桃 | 欧美日韩亚洲国产一区 | 少妇大叫太粗太大爽一区二区 | 久久久久无码精品国产 | 什么网站可以看毛片 | 国产自产自拍 | 欧美日韩国产成人精品 | 亚洲第一天堂久久 | 五月色婷婷综合 | 欧美日韩激情一区 | 鬼灭之刃柱训练篇在线观看 | 亚洲精品久久久久久一区二区 | 干夜夜| 成人免费xxxxxx视频 | 少妇久久久 | 国产精品大全 | 日本韩国在线播放 | 亚洲av永久中文无码精品综合 | 公肉吊粗大爽色翁浪妇视频 | 网站黄在线| 久久久久99人妻一区二区三区 | 在线成人影视 | 3d动漫精品啪啪一区二区免费 | 影音先锋在线播放 | 六月丁香啪啪 | 人妻体内射精一区二区三区 | 欧美精品一区二区在线观看 | 免费一级片视频 | xxxxx在线观看 | 毛片无码免费无码播放 | 天天干天天草天天射 | 69精品一区二区 | 欧美黑人激情 | 国产精品久久久久久久久免费看 | 三级视频小说 | 成人a毛片久久免费播放 | 国产精品久久久久一区二区 | 欧美一区二区三区公司 | 国产人人爽 | 黄色一级片免费看 | 色黄网站 | 亚洲无遮挡 | 美女张开腿让男人桶爽 | 女人黄色片 | 123毛片| 漂亮人妻被黑人久久精品 | 欧美日韩一区不卡 | 秋霞成人午夜伦在线观看 | 久久久久久久久久久久 | 你懂的网址在线 | 久久久高清免费视频 |