File Android Wear:本地保存文件
是否可以将文件保存在可穿戴设备中? 我尝试了在手机上使用的相同过程,但java.io向我发送了一个异常 文件目录=nullFile 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
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);
}