可以将文件保存在可穿戴设备中吗? 我尝试在手机上使用相同的程序,但java.io发给我一个异常。
File directory = 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());
}
我必须写内部或外部存储吗?是否可以检索此文件?
提前致谢
答案 0 :(得分:4)
我将举例说明如何存储图片并将其取回。
保存的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);
}
答案 1 :(得分:1)
看起来Wear不支持getExternalStorageDirectory()
;像你这样的mkdirs()
电话也会失败。我可以推测,由于可穿戴设备上的存储空间非常有限,因此Google希望将其限制为在卸载应用时自动删除的目录。使用getExternalStorageDirectory()
时,无法保证这一点。但那只是猜测。 :^)
您有理由使用这种传统方法吗?有很多新的API调用可以在Wear上正常工作。一个例子是Context.getExternalFilesDir()
。如果您确实需要外部存储空间,这是getExternalStorageDirectory()
电话的“插入式”替代品。
但值得注意的是,在可穿戴设备上,外部存储的想法有些不稳定。目前没有Wear设备支持SD卡,许多甚至不支持将它们安装到计算机所需的USB连接。正如getExternalFilesDir
的文档所说,
如果共享存储设备被模拟(由...确定) isExternalStorageEmulated(File)),它的内容由a支持 私有用户数据分区,这意味着没什么好处 这里存储数据而不是返回的私有目录 getFilesDir()等。
我建议您审核the Storage Options guide page,考虑一下您的应用在存储方面真正需要的内容,并使用一种更新,更集中的呼叫。