需要在Android中“保存缓存文件”的示例程序

时间:2010-10-27 02:50:36

标签: android

我需要一个示例应用程序来演示如何在Android中保存缓存文件以及如何使用getCacheDir()方法?
任何人都可以帮我解决这个问题吗?我需要将文件保存在绝对目录中并需要解析该文件。
提前谢谢。

3 个答案:

答案 0 :(得分:7)

使用(在活动中):

String textToCache = "Some text";
boolean success = GetCacheDirExample.writeAllCachedText(this, "myCacheFile.txt", textToCache);
String readText = GetCacheDirExample.readAllCachedText(this, "myCacheFile.txt");

GetCacheDirExample.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import android.content.Context;

public class GetCacheDirExample {

    public static String readAllCachedText(Context context, String filename) {
        File file = new File(context.getCacheDir(), filename);
        return readAllText(file);
    }

    public static String readAllResourceText(Context context, int resourceId) {
        InputStream inputStream = context.getResources().openRawResource(resourceId);
        return readAllText(inputStream);
    }

    public static String readAllFileText(String file) {
        try {
            FileInputStream inputStream = new FileInputStream(file);
            return readAllText(inputStream);
        } catch(Exception ex) {
            return null;
        }
    }

    public static String readAllText(File file) {
        try {
            FileInputStream inputStream = new FileInputStream(file);
            return readAllText(inputStream);
        } catch(Exception ex) {
            return null;
        }
    }

    public static String readAllText(InputStream inputStream) {
        InputStreamReader inputreader = new InputStreamReader(inputStream);
        BufferedReader buffreader = new BufferedReader(inputreader);

        String line;
        StringBuilder text = new StringBuilder();

        try {
            while (( line = buffreader.readLine()) != null) {
                text.append(line);
                text.append('\n');
            }
        } catch (IOException e) {
            return null;
        }

        return text.toString();
    }

    public static boolean writeAllCachedText(Context context, String filename, String text) {
        File file = new File(context.getCacheDir(), filename);
        return writeAllText(file, text);
    }

    public static boolean writeAllFileText(String filename, String text) {
        try {
            FileOutputStream outputStream = new FileOutputStream(filename);
            return writeAllText(outputStream, text);
        } catch(Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

    public static boolean writeAllText(File file, String text) {
        try {
            FileOutputStream outputStream = new FileOutputStream(file);
            return writeAllText(outputStream, text);
        } catch(Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

    public static boolean writeAllText(OutputStream outputStream, String text) {
        OutputStreamWriter outputWriter = new OutputStreamWriter(outputStream);
        BufferedWriter bufferedWriter = new BufferedWriter(outputWriter);
        boolean success = false;

        try {
            bufferedWriter.write(text);
            success = true;
        } catch(Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                bufferedWriter.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }

        return success;
    }

}

答案 1 :(得分:3)

  /** Getting Cache Directory */
  File tempFile; 
  File cDir = getBaseContext().getCacheDir();

/* Makes a textfile in the absolute cache directory  */
 tempFile = new File(cDir.getPath() + "/" + "textFile.txt") ;

/* Writing into the created textfile */
FileWriter writer=null;
try {
   writer = new FileWriter(tempFile);
   writer.write("hello workd!");
   writer.close();
   } catch (IOException e) {
                e.printStackTrace();
            }

/* Reading from the Created File */ 
String strLine="";
StringBuilder text = new StringBuilder();
    try {
        FileReader fReader = new FileReader(tempFile);
        BufferedReader bReader = new BufferedReader(fReader);

        while( (strLine=bReader.readLine()) != null  ){
            text.append(strLine+"\n");
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }

答案 2 :(得分:0)

除非你真的需要它来缓存,否则你应该考虑更持久地存储文件:

http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

我没有尝试过使用缓存,但似乎一旦获得句柄,它应该使用与持久文件相同的命令。