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();
}
}
}