android的檔案操作要有權限:
view plaincopy to clipboardprint?
<uses-permission
android:name="android.permission.write_external_storage"></uses-permission>
<uses-permission android:name="android.permission.write_external_storage"></uses-permission>
sd卡下的檔案操作:
1、判斷sd卡是否插入
environment.getexternalstoragestate().equals(
android.os.environment.media_mounted);
environment.getexternalstoragestate().equals(
android.os.environment.media_mounted);
2、獲得sd卡根目錄:
file skroot = environment.getexternalstoragedirectory();
file skroot = environment.getexternalstoragedirectory();
私有目錄下的檔案操作:
1、獲得私有根目錄:
file fileroot = context.getfilesdir()+"//";
file fileroot = context.getfilesdir()+"//";
還未整理
檔案夾或檔案夾操作:
1、确定或獲得檔案夾和檔案路徑
a、獲得檔案或檔案夾的絕對路徑和相對路徑。差別
string path = file.getpath();//相對
string path = file.getabsoultepath();//絕對
string path = file.getpath();//相對
string path = file.getabsoultepath();//絕對
b 、獲得檔案或檔案夾的父目錄
string parentpath = file.getparent();
string parentpath = file.getparent();
c、獲得檔案或檔案夾的名稱:
string name = file.getname();
string name = file.getname();
2、建立檔案或檔案夾
file.mkdir(); //建立檔案夾
file.createnewfile();//建立檔案
file.mkdir(); //建立檔案夾
file.createnewfile();//建立檔案
3、判斷是檔案或檔案夾
file.isdirectory()
file.isdirectory()
4、列出檔案夾下的所有檔案和檔案夾名
file[] files = file.listfiles();
file[] files = file.listfiles();
5、修改檔案夾和檔案名
file.renameto(dest);
file.renameto(dest);
6、删除檔案夾或檔案
file.delete();
file.delete();
package otheri.common;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputstream;
import otheri.io.input;
import otheri.io.output;
import android.content.context;
import android.os.environment;
public class filehelper {
private context context;
private string sdpath;
private string filespath;
public filehelper(context context) {
this.context = context;
sdpath = environment.getexternalstoragedirectory().getpath() +
"//";
filespath = this.context.getfilesdir().getpath() +
}
/**
* 在sd卡上建立檔案
*
* @throws ioexception
*/
public file creatsdfile(string filename)
throws ioexception {
file file = new file(sdpath + filename);
file.createnewfile();
return file;
* 删除sd卡上的檔案
* @param filename
public boolean delsdfile(string filename) {
if (file == null || !file.exists() || file.isdirectory())
return
false;
file.delete();
return true;
* 在sd卡上建立目錄
* @param dirname
public file creatsddir(string dirname) {
file dir = new file(sdpath + dirname);
dir.mkdir();
return dir;
* 删除sd卡上的目錄
public boolean delsddir(string dirname) {
return deldir(dir);
* 修改sd卡上的檔案或目錄名
public boolean renamesdfile(string oldfilename, string newfilename) {
file olefile = new file(sdpath + oldfilename);
file newfile = new file(sdpath + newfilename);
return olefile.renameto(newfile);
* 拷貝sd卡上的單個檔案
* @param path
public boolean copysdfileto(string srcfilename, string destfilename)
throws ioexception {
file srcfile = new file(sdpath + srcfilename);
file destfile = new file(sdpath + destfilename);
return copyfileto(srcfile, destfile);
* 拷貝sd卡上指定目錄的所有檔案
* @param srcdirname
* @param destdirname
* @return
public boolean copysdfilesto(string srcdirname, string destdirname)
file srcdir = new file(sdpath + srcdirname);
file destdir = new file(sdpath + destdirname);
return copyfilesto(srcdir, destdir);
* 移動sd卡上的單個檔案
* @param srcfilename
* @param destfilename
public boolean movesdfileto(string srcfilename, string destfilename)
return movefileto(srcfile, destfile);
* 移動sd卡上的指定目錄的所有檔案
public boolean movesdfilesto(string srcdirname, string destdirname)
return movefilesto(srcdir, destdir);
/*
* 将檔案寫入sd卡。如:writesdfile("test.txt");
public output writesdfile(string filename)
fileoutputstream fos = new fileoutputstream(file);
return new output(fos);
* 在原有檔案上繼續寫檔案。如:appendsdfile("test.txt");
public output appendsdfile(string filename)
fileoutputstream fos = new fileoutputstream(file,
true);
* 從sd卡讀取檔案。如:readsdfile("test.txt");
public input readsdfile(string filename)
fileinputstream fis = new fileinputstream(file);
return new input(fis);
* 建立私有檔案
public file creatdatafile(string filename)
file file = new file(filespath + filename);
* 建立私有目錄
public file creatdatadir(string dirname) {
file dir = new file(filespath + dirname);
* 删除私有檔案
public boolean deldatafile(string filename) {
return delfile(file);
* 删除私有目錄
public boolean deldatadir(string dirname) {
file file = new file(filespath + dirname);
return deldir(file);
* 更改私有檔案名
* @param oldname
* @param newname
public boolean renamedatafile(string oldname, string newname) {
file oldfile = new file(filespath + oldname);
file newfile = new file(filespath + newname);
return oldfile.renameto(newfile);
* 在私有目錄下進行檔案複制
* : 包含路徑及檔案名
public boolean copydatafileto(string srcfilename, string destfilename)
file srcfile = new file(filespath + srcfilename);
file destfile = new file(filespath + destfilename);
* 複制私有目錄裡指定目錄的所有檔案
public boolean copydatafilesto(string srcdirname, string destdirname)
file srcdir = new file(filespath + srcdirname);
file destdir = new file(filespath + destdirname);
* 移動私有目錄下的單個檔案
public boolean movedatafileto(string srcfilename, string destfilename)
* 移動私有目錄下的指定目錄下的所有檔案
public boolean movedatafilesto(string srcdirname, string destdirname)
* 将檔案寫入應用私有的files目錄。如:writefile("test.txt");
public output wirtefile(string filename)
outputstream os = context.openfileoutput(filename,
context.mode_world_writeable);
return new output(os);
* 在原有檔案上繼續寫檔案。如:appendfile("test.txt");
public output appendfile(string filename)
outputstream os = context.openfileoutput(filename, context.mode_append);
* 從應用的私有目錄files讀取檔案。如:readfile("test.txt");
public input readfile(string filename)
inputstream is = context.openfileinput(filename);
return new input(is);
/**********************************************************************************************************/
/*********************************************************************************************************/
* 删除一個檔案
* @param file
public boolean delfile(file file) {
if (file.isdirectory())
return false;
return file.delete();
* 删除一個目錄(可以是非空目錄)
* @param dir
public boolean deldir(file dir) {
if (dir == null || !dir.exists() || dir.isfile()) {
}
for (file file : dir.listfiles()) {
if (file.isfile()) {
file.delete();
} else if (file.isdirectory()) {
deldir(file);// 遞歸
}
dir.delete();
* 拷貝一個檔案,srcfile源檔案,destfile目标檔案
public boolean copyfileto(file srcfile, file destfile)
if (srcfile.isdirectory() || destfile.isdirectory())
return false;// 判斷是否是檔案
fileinputstream fis = new fileinputstream(srcfile);
fileoutputstream fos = new fileoutputstream(destfile);
int readlen =
0;
byte[] buf = new
byte[1024];
while ((readlen = fis.read(buf)) != -1) {
fos.write(buf, 0, readlen);
fos.flush();
fos.close();
fis.close();
* 拷貝目錄下的所有檔案到指定目錄
* @param srcdir
* @param destdir
public boolean copyfilesto(file srcdir, file destdir)
if (!srcdir.isdirectory() || !destdir.isdirectory())
return false;// 判斷是否是目錄
if (!destdir.exists())
return false;// 判斷目标目錄是否存在
file[] srcfiles = srcdir.listfiles();
for (int i =
0; i < srcfiles.length; i++) {
if (srcfiles[i].isfile()) {
// 獲得目标檔案
file destfile = new file(destdir.getpath() +
"//"
+ srcfiles[i].getname());
copyfileto(srcfiles[i], destfile);
} else if (srcfiles[i].isdirectory()) {
file thedestdir = new file(destdir.getpath() +
copyfilesto(srcfiles[i], thedestdir);
* 移動一個檔案
* @param srcfile
* @param destfile
public boolean movefileto(file srcfile, file destfile)
boolean iscopy = copyfileto(srcfile, destfile);
if (!iscopy)
delfile(srcfile);
* 移動目錄下的所有檔案到指定目錄
public boolean movefilesto(file srcdir, file destdir)
if (!srcdir.isdirectory() || !destdir.isdirectory()) {
file[] srcdirfiles = srcdir.listfiles();
0; i < srcdirfiles.length; i++) {
if (srcdirfiles[i].isfile()) {
file onedestfile = new file(destdir.getpath() +
+ srcdirfiles[i].getname());
movefileto(srcdirfiles[i], onedestfile);
delfile(srcdirfiles[i]);
} else if (srcdirfiles[i].isdirectory()) {
movefilesto(srcdirfiles[i], onedestfile);
deldir(srcdirfiles[i]);
}
package otheri.common;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.outputstream;
import otheri.io.input;
import otheri.io.output;
import android.content.context;
import android.os.environment;
public class filehelper {
private context context;
private string sdpath;
private string filespath;
public filehelper(context context) {
this.context = context;
sdpath = environment.getexternalstoragedirectory().getpath() + "//";
filespath = this.context.getfilesdir().getpath() + "//";
}
/**
* 在sd卡上建立檔案
*
* @throws ioexception
*/
public file creatsdfile(string filename) throws ioexception {
file file = new file(sdpath + filename);
file.createnewfile();
return file;
* 删除sd卡上的檔案
* @param filename
public boolean delsdfile(string filename) {
if (file == null || !file.exists() || file.isdirectory())
return false;
return true;
* 在sd卡上建立目錄
* @param dirname
public file creatsddir(string dirname) {
file dir = new file(sdpath + dirname);
dir.mkdir();
return dir;
* 删除sd卡上的目錄
public boolean delsddir(string dirname) {
return deldir(dir);
* 修改sd卡上的檔案或目錄名
public boolean renamesdfile(string oldfilename, string newfilename) {
file olefile = new file(sdpath + oldfilename);
file newfile = new file(sdpath + newfilename);
return olefile.renameto(newfile);
* 拷貝sd卡上的單個檔案
* @param path
public boolean copysdfileto(string srcfilename, string destfilename)
throws ioexception {
file srcfile = new file(sdpath + srcfilename);
file destfile = new file(sdpath + destfilename);
return copyfileto(srcfile, destfile);
* 拷貝sd卡上指定目錄的所有檔案
* @param srcdirname
* @param destdirname
* @return
public boolean copysdfilesto(string srcdirname, string destdirname)
file srcdir = new file(sdpath + srcdirname);
file destdir = new file(sdpath + destdirname);
return copyfilesto(srcdir, destdir);
* 移動sd卡上的單個檔案
* @param srcfilename
* @param destfilename
public boolean movesdfileto(string srcfilename, string destfilename)
return movefileto(srcfile, destfile);
* 移動sd卡上的指定目錄的所有檔案
public boolean movesdfilesto(string srcdirname, string destdirname)
return movefilesto(srcdir, destdir);
/*
* 将檔案寫入sd卡。如:writesdfile("test.txt");
public output writesdfile(string filename) throws ioexception {
fileoutputstream fos = new fileoutputstream(file);
return new output(fos);
* 在原有檔案上繼續寫檔案。如:appendsdfile("test.txt");
public output appendsdfile(string filename) throws ioexception {
fileoutputstream fos = new fileoutputstream(file, true);
* 從sd卡讀取檔案。如:readsdfile("test.txt");
public input readsdfile(string filename) throws ioexception {
fileinputstream fis = new fileinputstream(file);
return new input(fis);
* 建立私有檔案
public file creatdatafile(string filename) throws ioexception {
file file = new file(filespath + filename);
* 建立私有目錄
public file creatdatadir(string dirname) {
file dir = new file(filespath + dirname);
* 删除私有檔案
public boolean deldatafile(string filename) {
return delfile(file);
* 删除私有目錄
public boolean deldatadir(string dirname) {
file file = new file(filespath + dirname);
return deldir(file);
* 更改私有檔案名
* @param oldname
* @param newname
public boolean renamedatafile(string oldname, string newname) {
file oldfile = new file(filespath + oldname);
file newfile = new file(filespath + newname);
return oldfile.renameto(newfile);
* 在私有目錄下進行檔案複制
* : 包含路徑及檔案名
public boolean copydatafileto(string srcfilename, string destfilename)
file srcfile = new file(filespath + srcfilename);
file destfile = new file(filespath + destfilename);
* 複制私有目錄裡指定目錄的所有檔案
public boolean copydatafilesto(string srcdirname, string destdirname)
file srcdir = new file(filespath + srcdirname);
file destdir = new file(filespath + destdirname);
* 移動私有目錄下的單個檔案
public boolean movedatafileto(string srcfilename, string destfilename)
* 移動私有目錄下的指定目錄下的所有檔案
public boolean movedatafilesto(string srcdirname, string destdirname)
* 将檔案寫入應用私有的files目錄。如:writefile("test.txt");
public output wirtefile(string filename) throws ioexception {
outputstream os = context.openfileoutput(filename,
context.mode_world_writeable);
return new output(os);
* 在原有檔案上繼續寫檔案。如:appendfile("test.txt");
public output appendfile(string filename) throws ioexception {
outputstream os = context.openfileoutput(filename, context.mode_append);
* 從應用的私有目錄files讀取檔案。如:readfile("test.txt");
public input readfile(string filename) throws ioexception {
inputstream is = context.openfileinput(filename);
return new input(is);
/**********************************************************************************************************/
/*********************************************************************************************************/
* 删除一個檔案
* @param file
public boolean delfile(file file) {
if (file.isdirectory())
return file.delete();
* 删除一個目錄(可以是非空目錄)
* @param dir
public boolean deldir(file dir) {
if (dir == null || !dir.exists() || dir.isfile()) {
for (file file : dir.listfiles()) {
if (file.isfile()) {
} else if (file.isdirectory()) {
deldir(file);// 遞歸
dir.delete();
* 拷貝一個檔案,srcfile源檔案,destfile目标檔案
public boolean copyfileto(file srcfile, file destfile) throws ioexception {
if (srcfile.isdirectory() || destfile.isdirectory())
return false;// 判斷是否是檔案
fileinputstream fis = new fileinputstream(srcfile);
fileoutputstream fos = new fileoutputstream(destfile);
int readlen = 0;
byte[] buf = new byte[1024];
while ((readlen = fis.read(buf)) != -1) {
fos.write(buf, 0, readlen);
fos.flush();
fos.close();
fis.close();
* 拷貝目錄下的所有檔案到指定目錄
* @param srcdir
* @param destdir
public boolean copyfilesto(file srcdir, file destdir) throws ioexception {
if (!srcdir.isdirectory() || !destdir.isdirectory())
return false;// 判斷是否是目錄
if (!destdir.exists())
return false;// 判斷目标目錄是否存在
file[] srcfiles = srcdir.listfiles();
for (int i = 0; i < srcfiles.length; i++) {
if (srcfiles[i].isfile()) {
// 獲得目标檔案
file destfile = new file(destdir.getpath() + "//"
+ srcfiles[i].getname());
copyfileto(srcfiles[i], destfile);
} else if (srcfiles[i].isdirectory()) {
file thedestdir = new file(destdir.getpath() + "//"
copyfilesto(srcfiles[i], thedestdir);
* 移動一個檔案
* @param srcfile
* @param destfile
public boolean movefileto(file srcfile, file destfile) throws ioexception {
boolean iscopy = copyfileto(srcfile, destfile);
if (!iscopy)
delfile(srcfile);
* 移動目錄下的所有檔案到指定目錄
public boolean movefilesto(file srcdir, file destdir) throws ioexception {
if (!srcdir.isdirectory() || !destdir.isdirectory()) {
file[] srcdirfiles = srcdir.listfiles();
for (int i = 0; i < srcdirfiles.length; i++) {
if (srcdirfiles[i].isfile()) {
file onedestfile = new file(destdir.getpath() + "//"
+ srcdirfiles[i].getname());
movefileto(srcdirfiles[i], onedestfile);
delfile(srcdirfiles[i]);
} else if (srcdirfiles[i].isdirectory()) {
movefilesto(srcdirfiles[i], onedestfile);
deldir(srcdirfiles[i]);
getpath與getabsoultepath的差別:
getabsolutepath():傳回抽象路徑名的絕對路徑名字元串。
public static
void test1(){
file file1 = new file(".//test1.txt");
file file2 = new file("d://workspace//test//test1.txt");
system.out.println("-----預設相對路徑:取得路徑不同------");
system.out.println(file1.getpath());
system.out.println(file1.getabsolutepath());
system.out.println("-----預設絕對路徑:取得路徑相同------");
system.out.println(file2.getpath());
system.out.println(file2.getabsolutepath());
-----預設相對路徑:取得路徑不同------
./test1.txt
d:/workspace/test/./test1.txt
-----預設絕對路徑:取得路徑相同------
d:/workspace/test/test1.txt
----------------------------------------------------
void test2() throws exception{
file file = new file("..//src//test1.txt");
system.out.println(file.getabsolutepath());
system.out.println(file.getcanonicalpath());
d:/workspace/test/../src/test1.txt
d:/workspace/src/test1.txt
--------------------------------------------
void test3() throws exception{
file file = new file("d://text.txt");
public static void test1(){
file file1 = new file(".//test1.txt");
file file2 = new file("d://workspace//test//test1.txt");
system.out.println("-----預設相對路徑:取得路徑不同------");
system.out.println(file1.getpath());
system.out.println(file1.getabsolutepath());
system.out.println("-----預設絕對路徑:取得路徑相同------");
system.out.println(file2.getpath());
system.out.println(file2.getabsolutepath());
-----預設相對路徑:取得路徑不同------
./test1.txt
d:/workspace/test/./test1.txt
-----預設絕對路徑:取得路徑相同------
d:/workspace/test/test1.txt
----------------------------------------------------
public static void test2() throws exception{
file file = new file("..//src//test1.txt");
system.out.println(file.getabsolutepath());
system.out.println(file.getcanonicalpath());
d:/workspace/test/../src/test1.txt
d:/workspace/src/test1.txt
--------------------------------------------
public static void test3() throws exception{
file file = new file("d://text.txt");
(1),确定d盤下沒有text.txt這個檔案,直接執行這段代碼,得到的結果是:
d:/text.txt注意這裡試大寫的text.txt
(2)在d盤下建立一個檔案,名叫text.txt,再次執行代碼,得到結果
d:/text.txt同樣的代碼得到不同的結果。