~~~
package com.example.filerw;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.RandomAccessFile;
import java.net.URL;
import org.apache.http.util.EncodingUtils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
public class FileUtil
{
private Context context;
public FileUtil(Context context)
{
this.context=context;
}
/**
* 讀取data/data/<package name>/files 目錄下的文件
* @param fileName
* @return
*/
public String readFromData(String fileName)
{
try
{
FileInputStream fis =context.openFileInput(fileName);
//圖片如此操作
//InputStream in = new BufferedInputStream(fis);
//Bitmap bitmap= BitmapFactory.decodeStream(in);
byte[]buff =new byte[1024];
int hasRead=0;
StringBuilder sb =new StringBuilder("");
while((hasRead=fis.read(buff))>0)
{
sb.append(new String(buff,0,hasRead));
}
fis.close();
return sb.toString();
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 將數據寫入data/data/<package name>/files 目錄下的文件
* @param content
* @param fileName
* @param mode
*/
public void writeToData(String content,String fileName,int mode)
{
try {
FileOutputStream fos =context.openFileOutput(fileName, mode);
PrintStream ps =new PrintStream(fos);
ps.println(content);
ps.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 讀取SD卡 目錄下的文件
* @param fileName
* @return
*/
public String readFromSDCard(String fileName)
{
try {
//檢測SD卡是否存在
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File sdCardDir = Environment.getExternalStorageDirectory();
FileInputStream fis =new FileInputStream(sdCardDir.getCanonicalPath()+"/"+fileName);
BufferedReader br =new BufferedReader(new InputStreamReader(fis));
StringBuilder sb =new StringBuilder("");
String line=null;
while((line =br.readLine())!=null)
{
sb.append(line);
}
br.close();
return sb.toString();
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
/**
* 接著寫入SD卡目錄下的文件 追加內容
* @param content
* @param FileName
* @param mode
*/
public void writeToSDCard(String content,String FileName,String mode)
{
try {
//檢測SD卡是否存在
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile =new File(sdCardDir.getCanonicalPath()+"/"+FileName);
RandomAccessFile raf =new RandomAccessFile(targetFile,mode);
raf.seek(targetFile.length());
raf.write(content.getBytes());
raf.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* fileName可以是路徑加文件名
* 必須先檢測SD卡是否存在
* @param fileName
* @return
* @throws IOException
*/
public String readSDFile(String fileName) throws IOException
{
if(isSDCardExists())
{
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
//如果是圖片可以這樣得到BitMap
// InputStream is = new BufferedInputStream(fis);
// Bitmap bitmap = BitmapFactory.decodeStream(is);
int length = fis.available();
byte [] buffer = new byte[length];
fis.read(buffer);
String res = EncodingUtils.getString(buffer, "UTF-8");
fis.close();
return res;
}
else
{
return null;
}
}
/**
* 必須先檢測SD卡是否存在
* fileName可以是路徑加文件名
* @param fileName
* @param write_str
* @throws IOException
*/
public void writeSDFile(String fileName, String write_str) throws IOException
{
if(isSDCardExists())
{
File file = new File(fileName);
FileOutputStream fos = new FileOutputStream(file);
byte [] bytes = ((String) write_str).getBytes();
fos.write(bytes);
fos.close();
}
}
/**
* 獲取網絡資源
* 圖片 文件 。。。
* @throws IOException
*/
public void writeToSDFromURL(String s,String fileName) throws IOException
{
if(isSDCardExists())
{
URL url =new URL(s);
InputStream is =url.openStream();
//轉化為Bitmap
//Bitmap bitmap =BitmapFactory.decodeStream(is);
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File file =new File(path+"/"+fileName);
FileOutputStream fop= new FileOutputStream(file);
OutputStream os = new BufferedOutputStream(fop);
//若寫入到DATA中就如下做
//OutputStream os=context.openFileOutput(fileName, context.MODE_WORLD_READABLE);
byte [] buff=new byte[1024];
int hasRead=0;
while((hasRead=is.read(buff))>0)
{
os.write(buff,0,hasRead);
}
is.close();
os.close();
}
}
public boolean isSDCardExists()
{
try {
String s= Environment.getExternalStorageDirectory().getCanonicalPath();
if(new File(s).exists())
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return false;
}
//有關SD卡讀寫都要加上讀寫權限
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
// String Name = File.getName(); //獲得文件或文件夾的名稱:
// String parentPath = File.getParent(); //獲得文件或文件夾的父目錄
// String path = File.getAbsoultePath();//絕對路經
// String path = File.getPath();//相對路經
// File.createNewFile();//建立文件
// File.mkDir(); //建立文件夾
// File.isDirectory(); //判斷是文件或文件夾
// File[] files = File.listFiles(); //列出文件夾下的所有文件和文件夾名
// File.renameTo(dest); //修改文件夾和文件名
// File.delete(); //刪除文件夾或文件
}
~~~
文件讀寫總結:
SD卡中的文件使用FileInputStream和FileOutputStream進行文件的操作。
存放在數據區(/data/data/..)的文件只能使用openFileOutput和openFileInput進行操作,不能使用FileInputStream和FileOutputStream進行文件的操作。
文件操作的一些方法:
String Name = File.getName();? //獲得文件或文件夾的名稱: ?
String parentPath = File.getParent();? //獲得文件或文件夾的父目錄 ?
String path = File.getAbsoultePath();//絕對路經 ?
String path = File.getPath();//相對路經? ?
File.createNewFile();//建立文件?? ?
File.mkDir(); //建立文件夾?? ?
File.isDirectory(); //判斷是文件或文件夾 ?
File[] files = File.listFiles();? //列出文件夾下的所有文件和文件夾名 ?
File.renameTo(dest);? //修改文件夾和文件名 ?
File.delete();? //刪除文件夾或文件 ?