将二维字符串数组保存在 .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.html if(!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 文件中并从中加载的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中保存二维数组(列表)?

将信息保存到文件中并在启动时加载?

将二维数组保存到 MongoDb 的最佳方法

Xamarin.Forms 将文件 (pdf) 保存在本地存储中并使用默认查看器打开

将一维数组的索引转换为二维数组 i。 e.行列

Java的二维数组的应用及杨辉三角的编写