在 Android 中,文件读取的方式取决于文件的存储位置。以下是常见的文件存储位置及其读取方法:
res/raw
文件夹中。assets
文件夹中。内部存储文件是应用私有的,适合存储敏感数据。
import android.content.Context;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class FileUtils {
public static String readFromInternalStorage(Context context, String fileName) {
StringBuilder content = new StringBuilder();
try (FileInputStream fis = context.openFileInput(fileName);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
}
调用示例:
String content = FileUtils.readFromInternalStorage(context, "example.txt");
外部存储需要权限,适合存储共享数据。
权限声明(在 AndroidManifest.xml
中):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
代码实现:
import android.os.Environment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class FileUtils {
public static String readFromExternalStorage(String filePath) {
StringBuilder content = new StringBuilder();
File file = new File(Environment.getExternalStorageDirectory(), filePath);
if (file.exists()) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return content.toString();
}
}
调用示例:
String content = FileUtils.readFromExternalStorage("example.txt");
资源文件存储在 res/raw
文件夹中,适合存储静态文件。
代码实现:
import android.content.Context;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class FileUtils {
public static String readFromRawResource(Context context, int resourceId) {
StringBuilder content = new StringBuilder();
try (InputStream is = context.getResources().openRawResource(resourceId);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
}
调用示例:
String content = FileUtils.readFromRawResource(context, R.raw.example);
Assets 文件夹适合存储静态文件或配置文件。
代码实现:
import android.content.Context;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class FileUtils {
public static String readFromAssets(Context context, String fileName) {
StringBuilder content = new StringBuilder();
try (InputStreamReader isr = new InputStreamReader(context.getAssets().open(fileName));
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
}
调用示例:
String content = FileUtils.readFromAssets(context, "example.txt");
FileNotFoundException
。将上述方法整合到一个工具类中:
import android.content.Context;
import android.os.Environment;
import java.io.*;
public class FileUtils {
// 从内部存储读取
public static String readFromInternalStorage(Context context, String fileName) {
StringBuilder content = new StringBuilder();
try (FileInputStream fis = context.openFileInput(fileName);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
// 从外部存储读取
public static String readFromExternalStorage(String filePath) {
StringBuilder content = new StringBuilder();
File file = new File(Environment.getExternalStorageDirectory(), filePath);
if (file.exists()) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return content.toString();
}
// 从资源文件读取
public static String readFromRawResource(Context context, int resourceId) {
StringBuilder content = new StringBuilder();
try (InputStream is = context.getResources().openRawResource(resourceId);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
// 从 Assets 文件夹读取
public static String readFromAssets(Context context, String fileName) {
StringBuilder content = new StringBuilder();
try (InputStreamReader isr = new InputStreamReader(context.getAssets().open(fileName));
BufferedReader reader = new BufferedReader(isr)) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
}
通过上述,可以根据文件存储位置选择合适的读取方法,满足 Android 应用中不同场景的文件读取需求。