package com.example.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EncodingUtils;
import com.example.sumtest.R;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Xml.Encoding;
public class IOUtil extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
- 1.创建并返回一个目录,此应用程序存储数据的路径
- 输出结果:getFileDir-dir1-/data/data/com.example.sumtest/files
 */
 File dir = getFilesDir();
 System.out.println("getFileDir-dir1-" + dir.toString());
 
 /**
- 2.创建并返回一个目录,存储缓冲文件,当系统资源不足时会清除
- 输出结果:getCacheDir-dir2-/data/data/com.example.sumtest/cache
 */
 File dir2 = getCacheDir();
 System.out.println("getCacheDir-dir2-" + dir2.toString());
 
 /**
- 3.创建并返回一个指定名称的目录,在此目录下存此文件 输出结果:
- getDir-dir3-/data/data/com.example.sumtest/app_sumtest
 */
 File dir3 = getDir("sumtest", MODE_PRIVATE);
 System.out.println("getDir-dir3-" + dir3);
 
 /**
- 4.用于返回数据库中指定名称的文件路径,在内部存储中应保存的路径
- 输出结果:getDatabasePath-dir4-/data/data/
- com.example.sumtest/databases/stu.db
 */
 File dir4 = getDatabasePath("stu.db");
 System.out.println("getDatabasePath-dir4-" + dir4);
 
 /**
- 5.打开一个输出流对象,通过这个对象 可以向abc.txt中写入数据 abc.txt位于
 */
 try {
 FileOutputStream fos = openFileOutput("abc.txt", MODE_PRIVATE);
 fos.write("哈哈哈--".getBytes());
 fos.flush();
 fos.close();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 /**
- 6.获得一个输入流对象,通过这个输入流对象读取指定文件,
- 这个文件在/data/data/com.example.sumtest/files下 输出结果:abc.txt-dir6哈哈哈--
 */
 try {
 FileInputStream fis = openFileInput("abc.txt");
 byte[] bs = new byte[fis.available()];
 int len = fis.read(bs);
 String str = new String(bs, 0, len);
 System.out.println("abc.txt-dir6" + str);
 fis.close();
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 /**
- 7.获得内部存储数据的目录 输出结果: dir7-/data
 */
 
 File dir7 = Environment.getDataDirectory();
 System.out.println("dir7-" + dir7);
 
 /**
- 8.获取内部存储下载缓冲目录,隐藏的目录 输出结果: dir8-/cache
 */
 File dir8 = Environment.getDownloadCacheDirectory();
 System.out.println("dir8-" + dir8);
 
 /**
- 9.获得内部下载系统的根目录 输出结果: dir9-/system
 */
 File dir9 = Environment.getRootDirectory();
 System.out.println("dir9-" + dir9);
 
 /**
- 10.创建并返回外部存储文件目录 , 需SD卡的写入权限 输出结果:
- dir10-/mnt/sdcard/Android/data/com.example.sumtest/files/Music
 */
 File dir10 = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
 System.out.println("dir10-" + dir10);
 
 /**
- 11.创建并返回外部缓冲目录, 需SD卡写入权限 输出结果:
- dir11-/mnt/sdcard/Android/data/com.example.sumtest/cache
 */
 File dir11 = getExternalCacheDir();
 System.out.println("dir11-" + dir11);
 
 /**
- 12.返回SD卡的根目录 输出结果: dir12-/mnt/sdcard
 */
 File dir12 = Environment.getExternalStorageDirectory();
 System.out.println("dir12-" + dir12);
 
 /**
- 13.返回SD卡的公共存储目录 输出结果: dir13-/mnt/sdcard/Music
 */
 File dir13 = Environment
 .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
 System.out.println("dir13-" + dir13);
 
 /**
- 14.返回SD的状态,每次使用SD卡时 ,都会检查其状态 输出结果: SdStatus-mounted
 */
 String SdStatus = Environment.getExternalStorageState();
 System.out.println("SdStatus-" + SdStatus);
 
 /**
- 15.对源生资源文件的访问,在assets下放test.txt,读取并写入内部存储数据文件目录下
 */
 File dir15 = getDatabasePath("test.txt");
 if (!dir15.exists()) {
 if (!dir15.getParentFile().exists()) {
 dir15.getParentFile().mkdir();
 }
 AssetManager manager = getAssets();
 try {
 InputStream is = manager.open("test.txt");
 FileOutputStream fos = new FileOutputStream(dir15);
 byte[] bs = new byte[1024];
 int len = 0;
 while ((len = is.read(bs)) > 0) {
 fos.write(bs, 0, len);
 fos.flush();
 }
 is.close();
 fos.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 
 /**
- 16.对资源文件的访问,在res/assets文件下 test.txt,读取文件中内容
- 输出结果: assets16-assetsTxt
 */
 try {
 InputStream is = getResources().getAssets().open("test.txt");
 int len = is.available();
 byte[] bs = new byte[len];
 is.read(bs);
 String str = EncodingUtils.getString(bs, HTTP.UTF_8);
 is.close();
 System.out.println("assets16-" + str);
 
 } catch (IOException e1) {
 e1.printStackTrace();
 }
 
 /**
- 17.对资源文件的访问,在res/raw文件下 test.txt,读取文件中内容 
- 输出结果: raw17-rawTxt
 */
 InputStream israw = getResources().openRawResource(R.raw.test);
 try {
 int len = israw.available();
 byte[] bs = new byte[len];
 israw.read(bs);//此句漏掉,读取出现乱码,原因不清楚求大神指点
 String str = EncodingUtils.getString(bs, HTTP.UTF_8);
 israw.close();
 System.out.println("raw17-" + str);
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 }
 }