【问题标题】:Android Studio :: Want to list files saved in default locationAndroid Studio :: 想要列出保存在默认位置的文件
【发布时间】:2017-12-12 04:48:41
【问题描述】:

我是 Android Studio 3.0 的新手,在 Nexus 4 上模拟 Marshmallow。我正在尝试构建我的应用程序的简单“保存文件”和“加载文件”部分。这是“保存文件”部分:

String filename = "myFile01";     // Then "myFile02", "myFile03", etc...
String userData = "Some useful data here...";
try {
    // Adapted from:  https://www.youtube.com/watch?v=_15mKw--RG0
    FileOutputStream fileOutputStream = openFileOutput(filename, MODE_PRIVATE);     // creates a file with given filename
    fileOutputStream.write(userData.getBytes());                                    // puts userData into the file
    fileOutputStream.close();
    Toast.makeText(getApplicationContext(), "File saved!", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

当用户创建和保存其他文件时,上面的代码将被一次又一次地调用。稍后,用户可能想要查看所有保存的文件并加载一个。我将有一个 ListView 显示所有文件...但我需要帮助阅读当前目录才能获得该列表。

我想我在某个地方读到过,在 Android 中,有一个平面目录供您的应用保存和检索文件。所以我希望如果我保存了一堆文件然后调用 read() 方法,我保存的所有文件都将简单地位于默认目录中,无需搜索。这似乎是一个糟糕的假设。原因如下:

这是我在默认目录中查找并列出在其中找到的所有文件的代码。首先,我需要所说的默认目录的路径:

// Get current directory adapted from:  https://stackoverflow.com/questions/5527764/get-application-directory
String packName, currDir;
PackageManager m = getPackageManager();
packName = getPackageName();
PackageInfo p = null;
try {
    p = m.getPackageInfo(packName, 0);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
currDir = p.applicationInfo.dataDir;

然后我打开“currDir”并将所有本地文件的名称存储在一个数组中:

// get list of files adapted from:  https://stackoverflow.com/questions/9317483/showing-a-list-of-files-in-a-listview#9317583
File dir = new File(currDir);
File[] filelist = dir.listFiles();
String[] fileArr = new String[filelist.length];
for (int i = 0; i < fileArr.length; i++) {
    fileArr[i] = filelist[i].getName();
}

从这里开始的计划是将“fileArr”加载到 ListView 中并从那里开始。但是当我通过调试器时,我看到这是“fileArr”的内容:

"cache"
"code_cache"
"files"

无论我之前保存了多少文件,这都是真的。

顺便说一句,在调试器中,packName 和 currDir 的分配看起来 100% 正确:

packName = com.mydomain.myapp
currDir  = /data/user/0/com.mydomain.myapp

所以...我有点假设我保存的文件实际上在这里:

/data/user/0/com.mydomain.myapp/files

因此,我应该将此附加到我的“获取当前目录”代码中:

// Get current directory adapted from:  https://stackoverflow.com/questions/5527764/get-application-directory
String packName, currDir;
...everything from before...
currDir = p.applicationInfo.dataDir+"/files";     // <---- appending "+"/files"

还是我走远了?任何建议将不胜感激,谢谢!

【问题讨论】:

    标签: java file android-studio directory


    【解决方案1】:

    首先,如果要将文件保存在应用程序的目录中,则应调用创建目录,

    File directoryDefault = new File(Environment.DIRECTORY_DOCUMENTS, "YOUR_FOLDER_NAME");
        if (!directoryDefault.exists()) {
            directoryDefault.mkdir();
        }
    

    然后,您必须将必须保存的所有文件保存在上述默认目录中。之后,当你想列出该目录中所有可用的文件时,你应该调用,

    private ArrayList<String> fileNames() {
        ArrayList<String> namesArray = new ArrayList<>();
        File[] arrayFiles = directoryDefault.listFiles();
    
        for (File file : arrayFiles) {
            namesArray.add(file.getName());
        }
        return namesArray;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-13
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多