【问题标题】:folder created on external storage are not properly visible in PC if i connect it via USB ( MTP )如果我通过 USB (MTP) 连接,在外部存储上创建的文件夹在 PC 中不正确可见
【发布时间】:2014-09-17 11:37:19
【问题描述】:

我在外部存储上创建了文件夹。在设备中,这些文件夹已正确创建,我可以查看和使用它们。现在我想在我的电脑上看到这些创建的文件夹,如果我将它连接到 USB。但我无法看到任何创建的文件夹。之后,我使用 MediaScannerConnection 类对给定文件夹路径进行媒体扫描。之后,我可以看到创建的文件夹,但特定路径上最里面的文件夹不正确可见。例如,假设我创建了 3 个文件夹(务实地),例如我想在手机的外部存储上创建文件夹 abc/def/h,而不是 eclipse 文件资源管理器中的路径是 mnt/shell/emulated/0/abc/def/ h 并且在我们的手机中,我们可以在文件管理器内部存储/abc/def/h 中看到它。但问题是在使用 MEdia Scanner 后,我可以看到 PC 中的文件夹,但我创建的最里面的文件夹“h”不像文件夹,它变成了 4kb 的文件而不是文件夹。所以像这样如果创建很多文件夹最里面的文件夹不是一种文件夹,而只是一种文件.. 虽然如果我不使用 mediascanner 并关闭电源并打开手机电源,但它可以正常工作意味着打开/关闭电源后我可以正确看到所有创建的文件夹。但我想在创建后查看创建的文件夹。我的代码如下

public void ReadFileAndMakeFolders(Context context){
    File file3;
    File file2;

     String[] splitedString;

     try {  

         //Attaching BufferedReader to the FileInputStream by the help of InputStreamReader  
         FileInputStream fis = context.openFileInput("databaseee.txt");

           InputStreamReader isr = new InputStreamReader(fis,"UTF-8");

           BufferedReader bufferedReader = new BufferedReader(isr);

           int i=0;
         String inputString;  
         //Reading data line by line and storing it into the stringbuffer                
         while ((inputString = bufferedReader.readLine()) != null) {  
             i++;

             splitedString = inputString.trim().split("\\s+");
             Toast.makeText(this, splitedString.length+""+ splitedString[1], Toast.LENGTH_SHORT).show();




              file2 = new File(splitedString[1]);
             file3 = file2.getParentFile();
            Log.i("mistake",file3.toString());


             String state = Environment.getExternalStorageState();

             if (Environment.MEDIA_MOUNTED.equals(state)) {
                 Toast.makeText(this, state, Toast.LENGTH_SHORT).show();

             }
                 File path = Environment.getExternalStorageDirectory();

                    File file = new File(path, file3.toString());




                 if (file.mkdirs()) {
                     Toast.makeText(this, "created" , Toast.LENGTH_SHORT).show();


                 }


                MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null,
                            new MediaScannerConnection.OnScanCompletedListener() {
                                public void onScanCompleted(String path, Uri uri) {
                                    Log.i("ExternalStorage", "Scanned " + path + ":");
                                    Log.i("ExternalStorage", "-> uri=" + uri);
                                }
                    });









         }  
         fis.close();
         bufferedReader.close();
         isr.close();




     } catch (IOException e) {  
         e.printStackTrace();  
     }  
     //Displaying data on the toast  




 }  

【问题讨论】:

  • how to create folder in mnt/shell/emulated/0。这条路不存在。请说出一台具有该设备的设备。您不能将文件夹添加到不存在的路径。
  • 在文件管理器/内部存储中有很多文件夹。我想在媒体、电影、音乐文件夹附近创建文件夹。如果您通过文件资源管理器查看设备而不是您可以在 mnt/shell/emulated/0/ 下找到这些文件夹,对不起,我无法说出设备的名称,因为一些安全原因
  • 我刚刚告诉你 /mnt/shell 不存在,你怎么能让我看那里?
  • 我的手机带有用户调试二进制文件,并且在文件资源管理器中存在这个 mnt/shell/emulated/0 路径。所有音乐、电影、铃声仅在此路径上可用
  • 好的。您还需要帮助来创建更多文件夹吗?

标签: java android file file-storage


【解决方案1】:

您需要使用 MediaScannerConnection.scanFile 更新 MediaScanner。在https://stackoverflow.com/a/31497971/4419474查看我对类似问题的回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2012-11-10
    • 2016-07-21
    • 2014-04-17
    • 2011-10-31
    相关资源
    最近更新 更多