android 中对文件的操作

来源:互联网 发布:谷嫂淘宝同款排除王下载 编辑:程序博客网 时间:2024/05/17 07:09

 1. android中可操作的文件分为: internal storage, external storage;

     对文件的操作:建立文件, 进行读写,关闭。

     Context 中对于internal 中的文件操作的方法:

public class MainActivity extends Activity {

public static final String TAG = "MainActivity";
public static final boolean DEBUG = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SQLiteDatabase db = openOrCreateDatabase("Angelababy.db", Context.MODE_PRIVATE, null);
db.execSQL("drop table if exists beauty");
db.execSQL("create table beauty(_id integer primary key autoincrement, name varchar, age integer)");
db.close();

db = openOrCreateDatabase("dengchao.db", Context.MODE_PRIVATE, null);
db.close();

File databaseDir = getDatabasePath("Angelababy.db");
File fileDir = getFilesDir();
File cacheDir = getCacheDir();
File privateDir = getDir("angelababy", Context.MODE_PRIVATE);
String codePath = getPackageCodePath();
String resourcePath = getPackageResourcePath();

// 这个方法只是返回相应的路径,即使所指定的文件不存在(在files中)
File getFileStreamPath = getFileStreamPath("getFileStreamPath");


String[] databaseList = databaseList();
String[] fileList =  fileList();

Log.i(TAG, "databaseList = "+Arrays.toString(databaseList));
Log.i(TAG, "fileList = "+Arrays.toString(fileList));

// 这两个方法,不报错即使所操作文件对象不存在
deleteDatabase("dengchao.db");
deleteFile("getFileStreamPath");

对于cahe中的文件的删除:可以先定位到这个file然后file.delete();

FileInputStream openFileInput = null;
FileOutputStream openFileOutput = null;


Log.i(TAG, "getFileStreamPath = "+getFileStreamPath);
try {

这两个方法是从files文件夹中得到输出输入流 

openFileOutput(Sring name, int mode) 可以建立一个新文件(如果文件不存在,所以不知它为什么还有

FileNotFoundException)。


openFileOutput = openFileOutput("openFileOutpput", Context.MODE_PRIVATE);
openFileInput = openFileInput("openFileInput");


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(openFileInput != null){
openFileInput.close();
}
if(openFileOutput != null){
openFileOutput.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Log.i(TAG, "databaseDir = "+databaseDir);
Log.i(TAG, "fileDir = "+fileDir);
Log.i(TAG, "cacheDir = "+cacheDir);
Log.i(TAG, "privateDir = "+privateDir);

Log.i(TAG, "codePath = "+codePath);
Log.i(TAG, "resourcePath = "+resourcePath);
Log.i(TAG, "getFileStreamPath = "+getFileStreamPath);

}

result:

databaseDir = /data/data/com.example.testfile/databases/Angelababy.db

fileDir = /data/data/com.example.testfile/files

cacheDir = /data/data/com.example.testfile/cache

privateDir = /data/data/com.example.testfile/app_angelababy

 // 这是apk的路径。

codePath = /data/app/com.example.testfile-2.apk

resourcePath = /data/app/com.example.testfile-2.apk

getFileStreamPath = /data/data/com.example.testfile/files/getFileStreamPath




File file = new File(getCacheDir().getParentFile(), "weilai");
outputStream = new FileOutputStream(file);
outputStream.write("I love you".getBytes());

这可以在/data/data/(pakagename)/下建立文件。


1>File.createTempFile(String prefix, String suffix, File dir); File.createTempFile(String prefix, String suffix);

2>fileDir.createNewFile(String name File dir);

这两个方法没什么区别,只是1>默认创建的文件在C:\Documents and Settings\Administrator\Local Settings\Temp下。如果指定了dir那么就和createNewFile一样了。

 public static File createTempFile(String prefix, String suffix, File directory)
            throws IOException {
        // Force a prefix null check first
        if (prefix.length() < 3) {
            throw new IllegalArgumentException("prefix must be at least 3 characters");
        }
        if (suffix == null) {
            suffix = ".tmp";
        }
        File tmpDirFile = directory;
        if (tmpDirFile == null) {
            String tmpDir = System.getProperty("java.io.tmpdir", ".");
            tmpDirFile = new File(tmpDir);
        }
        File result;
        do {
            result = new File(tmpDirFile, prefix + tempFileRandom.nextInt() + suffix);
        } while (!result.createNewFile());
        return result;
    }

上面是 createTempFile的源码;





0 0