Android API 23 mkdir创建的文件夹在Windows资源管理器中显示为单个文件

时间:2016-09-20 06:20:46

标签: android directory android-6.0-marshmallow mkdir mtp

所以基本上我用mkdir创建一个文件夹,然后将一个简单的文本文件写入该文件夹。作为最后一步,我使用MediaScannerConnection.ScanFile使它们对文件资源管理器可见。

文件夹和文本文件都在我的android手机上的文件浏览器中可见。当使用MTP通过USB将手机连接到我的Windows 10计算机时,我看到所有其他文件夹,但我新创建的文件夹显示为单个文件,没有扩展名,4KB大小。

重新启动智能手机和计算机无法解决问题但是当我在我的android文件浏览器中重命名该文件夹然后重新启动手机时,它会在Windows资源管理器中显示为普通文件夹。

应用程序在单击按钮后显示一个对话框,其中包含要覆盖的文件列表,edittext以输入新文件名,否定按钮和正按钮。

这里的代码:

 /*
Save Config in a File stored in interal storage --> which is emulated as external storage 0
Shows a Dialog window with the option to select a file which is already there or type in a name for a new file or choose from a list of files 
--> save the new file or cancel the dialog
*/
public void savebutton(View view) {

        try {
            // Instantiate an AlertDialog with application context this
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            //External Storage storage/emulated/0/Config --> storage/emulated/0 is internal storage emulated as sd-card
            dir = new File(Environment.getExternalStorageDirectory() + folder);
            if (!dir.exists()) {
                if (!dir.mkdir()) { //create directory if not existing yet
                    Log.d(MainActivity.LOG_TAG, "savebutton: directory was not created");
                }
            }

            //set title of dialog
            builder.setTitle("Save Configuration in Text File");
            //Add edittext to dialog
            final EditText input = new EditText(ConfigActivity.this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            input.setLayoutParams(lp);
            input.setImeOptions(EditorInfo.IME_ACTION_DONE);        // instead of a RETURN button you get a DONE button
            input.setSingleLine(true);                              // single line cause more lines would change the layout
            java.util.Calendar c = java.util.Calendar.getInstance();
            int day = c.get(java.util.Calendar.DAY_OF_MONTH);
            int month = c.get(java.util.Calendar.MONTH) + 1;
            int year = c.get(java.util.Calendar.YEAR);
            String date = Integer.toString(day) + "." + Integer.toString(month) + "." + Integer.toString(year);
            String savename = name + "-" + date;
            input.setText(savename);

            //Append term + "=" + value --> like LevelOn=50
            for (int itemcounter = 0; itemcounter < value.length; itemcounter++)
                datastring += (term[itemcounter] + "=" + getvalue(itemcounter) + "\n");

            //File List of already stored files for dialog
            mFilelist = dir.list();
            builder.setItems(mFilelist, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    mChosenFile = mFilelist[which]; // the item/file which was selected in the file list

                    try {
                        //Create text file in directory /Pump Config Files
                        File file = new File(dir.getAbsolutePath(), mChosenFile);
                        //create bufferedwrite with filewriter
                        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                        //write to file --> an existing file will be overwritten
                        bw.write(datastring);
                        //Flush bufferedwriter
                        bw.close();
                        //LOG
                        System.out.println("Wrote to file");
                        //Show a message
                        Toast.makeText(getApplicationContext(), "Saved data", Toast.LENGTH_SHORT).show();

                        // initiate media scan -->cause sometimes created files are nt shown on computer when connected to phone via USB
                        // restarting the smartphone or rename folder can help too
                        // make the scanner aware of the location and the files you want to see
                        MediaScannerConnection.scanFile(
                                getApplicationContext(),
                                new String[]{dir.getAbsolutePath()},
                                null,
                                new MediaScannerConnection.OnScanCompletedListener() {
                                    @Override
                                    public void onScanCompleted(String path, Uri uri) {
                                        Log.v("LOG", "file " + path + " was scanned successfully: " + uri);
                                    }
                                });
                    } catch (Exception e) {
                        System.out.print(e.toString());
                    }
                    //dismissing the dialog
                    dialog.cancel();
                    dialog.dismiss();
                }
            });

            // Get the AlertDialog from builder create()
            AlertDialog dialog = builder.create();
            //Set dialog view/layout
            dialog.setView(input);

            //Add positive button to dialog
            //When pressing the positive button a file with the specified name and configurtion is stored on internal storage
            dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Save", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        filename = input.getText().toString();
                        //Create text file in directory /Pump Config Files
                        File file = new File(dir.getAbsolutePath(), filename + ".txt");
                        //create bufferedwrite with filewriter
                        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                        //write to file --> an existing file will be overwritten
                        bw.write(datastring);
                        //Flush bufferedwriter
                        bw.close();
                        //LOG
                        System.out.println("Wrote to file");
                        //Show a message
                        Toast.makeText(getApplicationContext(), "Saved data", Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        System.out.print(e.toString());
                    }
                    // initiate media scan -->cause sometimes created files are nt shown on computer when connected to phone via USB
                    // restarting the smartphone or rename folder can help too
                    // make the scanner aware of the location and the files you want to see
                    MediaScannerConnection.scanFile(
                            getApplicationContext(),
                            new String[]{dir.getAbsolutePath()},
                            null,
                            new MediaScannerConnection.OnScanCompletedListener() {
                                @Override
                                public void onScanCompleted(String path, Uri uri) {
                                    Log.v("LOG", "file " + path + " was scanned successfully: " + uri);
                                }
                            });

                    dialog.cancel();
                    dialog.dismiss();
                }
            });

            //Add negative button
            dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            //show the save dialog
            dialog.show();
        } catch (Exception e) {
            System.out.print(e.toString());
        }
    }

在Android API 23和API 21上测试过。 在21日工作正常但在23日没有。

1 个答案:

答案 0 :(得分:1)

谢谢greenapps,

new String [] {dir.getAbsolutePath()} ,.您应该让扫描文件:new String [] {file.getAbsolutePath()},

工作正常。

我总是错过这样的小细节。