Как скопировать файл из средства выбора файлов и скопировать в существующую папку во внутреннем хранилище? - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужна помощь!

Я сделал приложение, в котором мы выбираем файл и копируем его в существующую папку в диспетчере устройств, поэтому здесь я сделал код, не работающий вообще. то, что происходит, может выбрать файл из средства выбора файлов, но не копировать в каталог во внутреннем хранилище, пожалуйста, помогите мне, я знаю, что это глупый вопрос, но мне это вряд ли нужно. Основная проблема заключается в том, как указать путь к выбранному файлу из средства выбора файлов. Пожалуйста, помогите мне

Заранее спасибо

 String result = null;
    Context mContext;
    String extension;

    File sourceLocation,targetLocation;
    private int REQUEST_CODE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


         sourceLocation = new File (String.valueOf(filePath));

        // make sure your target location folder exists!
        targetLocation = new File (Environment.getExternalStorageDirectory() + "/myappfolder");

    }


    public void selectfile(View view) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(getApplication(),
                Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                    Uri.parse("package:" + getPackageName()));
            startActivity(intent);
            return;
        }

        //creating an intent for file chooser
        Intent intent = new Intent();
        intent.setType("*/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);

        copyfile();

    }

    public void copyfile(){

        try {

            if (sourceLocation.exists()) {

                InputStream in = new FileInputStream(sourceLocation);
                OutputStream out = new FileOutputStream(targetLocation);

                // Copy the bits from instream to outstream
                byte[] buf = new byte[1024];
                int len;

                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }

                in.close();
                out.close();

                Toast.makeText(mContext, "Copy file successful.", Toast.LENGTH_SHORT).show();

            } else {
                Toast.makeText(mContext, "Copy file failed. Source file missing", Toast.LENGTH_SHORT).show();
            }
        }catch (Exception e){
            e.printStackTrace();

    }
    }




    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);



        if(requestCode == SELECT_PICTURE && resultCode == RESULT_OK
                && data != null && data.getData() != null )
        {
            filePath = data.getData();

           getFileName(filePath);
           getFileExtension(filePath);


        }

    }

...