【问题标题】:how to copy file to new folder?如何将文件复制到新文件夹?
【发布时间】:2014-06-11 19:35:20
【问题描述】:

我有一个类向我展示一个图像 + 2 个文本视图。按下按钮 SAVE 后,它应该创建具有图像描述名称的新文件夹并将图像复制到该文件夹​​。创建文件夹没问题,但文件没有出现在其中。有人可以帮帮我吗?

public class TagActivity extends Activity {

private ImageMetadata imgData;
private TextView imageTitle;
private TextView imageDescription;

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

    final Intent i = getIntent();
    final String imgPath = i.getExtras().getString("imgPath");
    final File imgFile = new File(imgPath);
    final String imgName = imgFile.getName();
    imgData = new ImageMetadata(this, imgName);

    imageTitle = (TextView) findViewById(R.id.imageTitle);
    imageDescription = (TextView) findViewById(R.id.imageDescription);
    final ImageView imageView = (ImageView) findViewById(R.id.imageView);

    imageView.setImageBitmap(
            ScaledBitmapFactory.decodeSampledBitmapFromFile(imgPath, imageView.getWidth(), 300));

    imageView.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            startActivity(new Intent(Intent.ACTION_VIEW,
                    Uri.fromFile(new File(imgPath))));
            return false;
        }
    });
    imageTitle.setText(imgData.getTitle());
    imageDescription.setText(imgData.getDescription());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.tag, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.action_save:
        final Intent i = getIntent();
        final String imgPath = i.getExtras().getString("imgPath");
        final File imgFile = new File(imgPath);
        final String imgName = imgFile.getName();
        imgData = new ImageMetadata(this, imgName);

        imgData.setTitle(imageTitle.getText().toString().trim());
        imgData.setDescription(imageDescription.getText().toString().trim());
        File folder = new File(Environment.getExternalStorageDirectory() + File.separator + imageDescription.getText().toString());
        boolean success = true;
        if (!folder.exists()) {
            success = folder.mkdirs();
        }

        if (success) {

        } else {
            // Do something else on failure 
        }

        try {
            File path = Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDirectory() + File.separator + imgData.getDescription());
            File file = new File(path, imgFile.getName() + ".jpg");
               // the Pictures directory exists? 
                path.mkdirs();
                InputStream is = new FileInputStream(imgPath);
                OutputStream os = new FileOutputStream(file);
                byte[] data = new byte[is.available()];
                is.read(data);
                os.write(data);
                is.close();
                os.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

【问题讨论】:

  • 单击“保存”按钮后,您首先会看到/选择一张图片,然后在 onActivityResult 中您正在尝试复制文件。文件复制代码不好。但我认为创建一个文件只会非常小。您在清单中有写入权限?
  • 你能改变我的代码吗??
  • `path.getAbsolutePath() 的值是多少?
  • 你是什么意思..? imgPath 是我的图像存在的路径。但我需要将图像复制到 imageDescription.getText().toString()
  • Log.d("value", path.getAbsolutePath());它打印什么?

标签: android image file stream copy


【解决方案1】:

这看起来不太好:

File path = Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDire‌​ctory() 
     + File.separator + imgData.getDescription()); 

如果您添加 toast 以查看生成的路径,您可能会解决问题:

Toast.makeText(context, "path.getAbsolutePath():\n" + path.getAbsolutePath*(), Toast.LENGTH_LONG).show();

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2010-10-28
    • 2021-05-13
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多