Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File Android Wear:本地保存文件_File_Exception_Save_Wear Os_Java Io - Fatal编程技术网

File Android Wear:本地保存文件

File Android Wear:本地保存文件,file,exception,save,wear-os,java-io,File,Exception,Save,Wear Os,Java Io,是否可以将文件保存在可穿戴设备中? 我尝试了在手机上使用的相同过程,但java.io向我发送了一个异常 文件目录=null File sd = Environment.getExternalStorageDirectory(); String path = sd.getAbsolutePath(); directory = new File(path, dirName); if (!directory.exists()) { directory

是否可以将文件保存在可穿戴设备中? 我尝试了在手机上使用的相同过程,但java.io向我发送了一个异常

文件目录=null

    File sd = Environment.getExternalStorageDirectory();
    String path = sd.getAbsolutePath();

    directory = new File(path, dirName);

    if (!directory.exists()) {
        directory.mkdirs();
    }

    File file = null;
    String extension = ".arff";
    String completeName = fileName + extension;

    try {
        file = new File(directory, completeName);
        if(!file.isFile())
            file.createNewFile();
        else {

            String[] parts = fileName.split("_");
            String baseName = parts[0];
            String num = parts[1];
            int i = Integer.parseInt(num);
            do{

                String newFileName = baseName+"_"+(i+1)+extension;
                file = new File(directory, newFileName);
                i++;

            } while(file.isFile());

            file.createNewFile();
        }
    } catch (IOException e) {
        Log.e("ERROR", "Exception while creating file:" + e.toString());
    }
我必须在内部存储器还是外部存储器上写入?是否可以检索此文件


提前感谢

看起来Wear不支持
getExternalStorageDirectory()
;像您这样的
mkdirs()
调用也会失败。我可以推测,由于可穿戴设备上的存储空间往往非常有限,谷歌希望将其限制在卸载应用程序时自动删除的目录中。对于
getExternalStorageDirectory()
,无法保证这一点。但这只是猜测。(^)

您是否有理由使用此旧方法?有很多新的API调用在磨损时工作良好。一个例子是。如果您确实需要外部存储,这将是对
getExternalStorageDirectory()
调用的“插入式”替换

但也值得注意的是,在可穿戴设备上,外部存储的想法有些动摇。目前没有一款穿戴设备支持SD卡,许多设备甚至不支持将其安装到计算机上所需的USB连接。正如
getExternalFilesDir
的文档所述

如果模拟了共享存储设备(由 isExternalStorageEmulated(File)),它的内容由 私有用户数据分区,这意味着 将数据存储在此处,而不是 getFilesDir()等


我建议您考虑一下您的应用程序在存储方面真正需要什么,并使用一个更新的、更集中的调用。

Wear似乎不支持
getExternalStorageDirectory()
;像您这样的
mkdirs()
调用也会失败。我可以推测,由于可穿戴设备上的存储空间往往非常有限,谷歌希望将其限制在卸载应用程序时自动删除的目录中。对于
getExternalStorageDirectory()
,无法保证这一点。但这只是猜测。(^)

您是否有理由使用此旧方法?有很多新的API调用在磨损时工作良好。一个例子是。如果您确实需要外部存储,这将是对
getExternalStorageDirectory()
调用的“插入式”替换

但也值得注意的是,在可穿戴设备上,外部存储的想法有些动摇。目前没有一款穿戴设备支持SD卡,许多设备甚至不支持将其安装到计算机上所需的USB连接。正如
getExternalFilesDir
的文档所述

如果模拟了共享存储设备(由 isExternalStorageEmulated(File)),它的内容由 私有用户数据分区,这意味着 将数据存储在此处,而不是 getFilesDir()等


我建议您回顾一下,考虑一下您的应用程序在存储方面真正需要的是什么,并使用一个更新的、更集中的调用。

我将给您举一个示例,让您存储图像并将其取回

2种保存方法:

private void saveBitmapIntoDevice(Bitmap bitmap, String imageName) {
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(getOutputMediaFile(imageName));
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
        // PNG is a lossless format, the compression factor (100) is ignored
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private File getOutputMediaFile(String imageName){

    File mediaStorageDir = new File(this.getExternalFilesDir(null)
            + "/Android/data/"
            + getApplicationContext().getPackageName()
            + "/Files");

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            return null;
        }
    }

    File mediaFile;
    String mImageName="IMG_" + imageName + ".png";
    mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
    return mediaFile;
}
如何取回数据:

File imgFile = getOutputMediaFile(imageName);

if(imgFile.exists()){
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    image2.setImageBitmap(myBitmap);
}

我将给你们一个例子来存储图像并将其取回

2种保存方法:

private void saveBitmapIntoDevice(Bitmap bitmap, String imageName) {
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(getOutputMediaFile(imageName));
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
        // PNG is a lossless format, the compression factor (100) is ignored
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private File getOutputMediaFile(String imageName){

    File mediaStorageDir = new File(this.getExternalFilesDir(null)
            + "/Android/data/"
            + getApplicationContext().getPackageName()
            + "/Files");

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            return null;
        }
    }

    File mediaFile;
    String mImageName="IMG_" + imageName + ".png";
    mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
    return mediaFile;
}
如何取回数据:

File imgFile = getOutputMediaFile(imageName);

if(imgFile.exists()){
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    image2.setImageBitmap(myBitmap);
}