【问题标题】:Create File Object in android fails在android中创建文件对象失败
【发布时间】:2015-09-09 10:15:48
【问题描述】:

我想通过 FileOutputstream 将文件写入手机的 SD 卡。目录已正确创建,但文件本身的创建失败。这是我的代码:

File outputDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/scan");
            outputDir.mkdirs();
            File outputFile = new File(outputDir, "image_" + System.currentTimeMillis() + ".jpg");
            cameraView.setResolution(MAX_HEIGHT, MAX_WIDTH);
            cameraView.takePicture(outputFile);

outputDir 是可读写的,当然设置了写入外部存储的权限。当我检查 outputfile.exists() 结果为假。这是错误消息:

09-09 12:05:56.232: E/BitmapFactory(24467): Unable to decode stream: java.io.FileNotFoundException: /storage/sdcard0/scan/image_1441793154138.jpg: open failed: ENOENT (No such file or directory)

我在这里做错了什么?

编辑: 这是 cameraView 对象在拍照时所做的事情:

public void takePicture(File file) {
    this.file = file;
    mCamera.setPreviewCallback(null);

    mCamera.takePicture(null, null, this);
}

@Override
public void onPictureTaken(byte[] data,
        Camera camera) {
    mCamera.startPreview();
    mCamera.setPreviewCallback(this);

    try {
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(data);
        fos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

【问题讨论】:

  • cameraView.takePicture(outputFile);首先必须拍照。然后用户可能必须确认它没问题。那么谁来拯救它呢?在哪里?如果无法保存,则保存时会出错。
  • 我编辑了问题以显示 takePicture 方法在做什么。
  • 是否调用了onPictureTaken?有问题吗?您应该在其中放置几条日志语句以了解实际发生的情况。
  • And here is the error-message:。您仍然没有告诉您何时以及在哪个代码行上收到该错误。
  • /BitmapFactory(24467): Unable to decode stream: ????位图工厂???您的代码中没有 BitmapFactory。而且这看起来不像保存。

标签: android file-io


【解决方案1】:
@Override
protected String doInBackground(Bitmap... params) {
        Bitmap bitmapToSave = params[0];

        File fPath = getAlbumStorageDir("FileName");
        File f = new File(fPath, "FileName" + Calendar.getInstance().getTimeInMillis() + ".txt");
        String filePath = null;
        try {
            FileOutputStream strm = new FileOutputStream(f);
            bitmapToSave.compress(yourCompressFormat, 100, strm);
            strm.close();
            filePath = f.getPath();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return filePath;
    }

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多