将二维字符串数组保存在 .text 文件中并从中加载
Posted
技术标签:
【中文标题】将二维字符串数组保存在 .text 文件中并从中加载【英文标题】:Saving a 2-dimensional Sting Array in a .txt file and load from it 【发布时间】:2018-03-27 18:26:46 【问题描述】:我想将二维字符串数组保存在 .txt 文件中,然后将其加载到我的应用程序中。数组应该在应用程序中是可编辑和可扩展的。我对 BufferedWriter、BufferedReader、FileInputStream 和 FileOutputStream 之类的东西并没有真正的经验。 我对这段代码有疑问:BufferedWriter 和 BufferedReader 抛出 NullPointerException,我不知道为什么。还是每个人都知道 FileInputStream 和 FileoutputStream 可以做到这一点?
public String path =
Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyFile";
File dir = new File(path);
if(!dir.exists())
dir.mkdirs();
File file = new File(path + "/savedFile.txt");
public static void Save(File file, String[][] list)
BufferedWriter writer = null;
StringBuilder builder = new StringBuilder();
try
writer = new BufferedWriter(new FileWriter(file));
catch (IOException e) e.printStackTrace();
try
try
for(int i = 0; i < list.length; i++)
for(int j = 0; j < list[i].length; j++)
builder.append(list[i][j]+"");
if(j < list.length - 1)
builder.append(",");
builder.append("\n");
catch (Exception e) e.printStackTrace();
finally
try
writer.write(builder.toString());
writer.close();
catch (IOException e) e.printStackTrace();
public static String[][] Load(File file)
BufferedReader reader = null;
try
reader = new BufferedReader(new FileReader(file));
catch (FileNotFoundException e) e.printStackTrace();
String test;
String[][] array = new String[4][2]; //the indexs are for a specific example; it should be expandable, but I solve that myself
String line;
int row = 0;
try
while ((line = reader.readLine()) != null)
String[] cols = line.split(",");
int col = 0;
for (String c : cols)
array[row][col] = c;
col++;
row++;
catch (IOException e) e.printStackTrace();
return array;
【问题讨论】:
您是否请求了 WRITE_EXTERNAL_STORAGE 权限?在这里,您可以了解有关如何在 android 上写入文件的更多信息:developer.android.com/training/data-storage/files.htmlif(!dir.exists()) dir.mkdirs();
。更改为if(!dir.exists()) if(!dir.mkdirs()) return;
。如果返回通知用户,则添加 Toast。它会回来的! ;-)。
你应该首先告诉你的 txt 文件如果你写了那个数组会是什么样子。你让我们猜猜你的想法。
@jonathanrz 是的,我的清单中有权限
【参考方案1】:
我认为问题在于您使用的多个大括号中的变量范围。试试这个代码:
public static void Save(File file, String[][] list)
StringBuilder builder = new StringBuilder();
for (int i = 0; i < list.length; i++)
for (int j = 0; j < list[i].length; j++)
builder.append(list[i][j] + "");
if (j < list.length - 1)
builder.append(",");
builder.append("\n");
try
Writer writer = new BufferedWriter(new FileWriter(file));
try
writer.write(builder.toString());
finally
writer.close();
catch (IOException ex)
ex.printStackTrace();
【讨论】:
谢谢。我明天测试一下。我现在去睡觉。但是加载方法看起来怎么样,因为也有一个 nullpointerexcepzion以上是关于将二维字符串数组保存在 .text 文件中并从中加载的主要内容,如果未能解决你的问题,请参考以下文章