前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从 Android 到 Windows 8:文件操作

从 Android 到 Windows 8:文件操作

作者头像
沈星繁
发布2018-01-04 15:22:50
1.9K0
发布2018-01-04 15:22:50

本文将带你了解如何编写代码,使得 Windows8 商店应用可以保存文件(例如照片和文档)。你可以将这些文件存储在应用数据文件夹,或将它们保存到外部存储介质(如 USB 驱动器)。

例如你编写了一个文字处理应用,用户可能希望保存正在处理的文档,并在下次使用时打开它。又例如你编写了一个照片编辑应用,用户可能希望将修改后照片保存到 USB 驱动器,然后将该 USB 驱动器连接到电视机或数码相框以便以后查看。为了帮助你的用户达到目的,你可以在第一个例子中把文档保存到应用数据文件夹,而在第二个例子中把照片保存到外部存储介质。

下面介绍 Windows 商店应用的应用数据文件夹。每个应用程序可以将文件存储到特定设备上的一组单独的目录(分别是 local,roaming 和 temporary 目录):

  • local 目录中的文件仅存在于当前设备中。
  • roaming 目录中的文件则会在同用户所有安装了该应用的设备中漫游。
  • temporary 目录和 local 目录类似,但是系统可以随时删除其中的文件。

当用户安装 Windows 商店应用时,Windows 会自动创建这些应用数据目录。你不必担心如何找到它们,因为 Windows 自动保存了这些目录的位置。你只需要使用 ApplicationData 类就可以访问它们。如果用户卸载了应用,Windows 会自动删除与之相关的应用数据目录,因此你也不必担心如何清理它们。

Windows 提示

如果用户需要保存的应用数据文件特别有价值,或具有不可替代性,请考虑将这类文件保存到其他更安全的位置,例如用户的 Skydrive。

若要将文件存储在外部存储介质中,可以使用 DeviceInformation 和StorageDevice 类。这些内容将在后文有更详细的介绍。

接下来介绍实际代码。

将文件保存到应用数据文件夹

在 Windows 商店应用中,如果要保存名为 hello.txt 的文件到 local 目录下,你可以使用如下代码:

代码语言:txt
复制
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Hello.txt"); 
await FileIO.WriteTextAsync(file, "Hello world!");

保存到 roaming 目录的代码如下:

代码语言:txt
复制
var file = await ApplicationData.Current.RoamingFolder.CreateFileAsync("Hello.txt"); 
await FileIO.WriteTextAsync(file, "Hello world!");

保存到 temporary 目录:

代码语言:txt
复制
var tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("TempFile.txt");

Android 提示

在安卓应用中,如果要保存文件到本地,你可以编写如下代码:

代码语言:txt
复制
File tempFile; 
tempFile = File.createTempFile("TempFile.txt", null, context.getCacheDir());
代码语言:txt
复制
String filename = "hello.txt"; 
String string = "Hello world!"; 
FileOutputStream outputStream;  
outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
outputStream.write(string.getBytes());
outputStream.close();

将文件创建模式设置为 MODE_PRIVATE,这样其他应用程序就无法访问你的应用数据了。作为对比,Windows 商店应用默认只能访问自己的应用数据。

将文件保存到外部存储

在 Windows 商店应用中,你必须在与应用关联的 Package.appsxmanifest 中声明可移动存储的访问权限。

声明这项权限后,首先使用如下代码检查外部存储介质是否可用。

代码语言:txt
复制
public async Task<bool> IsExternalStorageAvailable() 
{
   var devices = await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector());
   if (devices.Count > 0)
        return true;
   else     
        return false; 
}

如果外部存储介质可用,就可以使用下列代码创建文件。

代码语言:txt
复制
var storage = StorageDevice.FromId(deviceInformation.Id); 
await storage.CreateFileAsync("HelloWorld.png");

Android提示

在Android应用程序中,为了完成类似的功能,首先需要在应用的 manifest 文件中声明 WRITE_EXTERNAL_STORAGE 权限,如下所示。

代码语言:txt
复制
<manifest>  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest>

请求权限后,使用如下代码检查外部存储介质是否可用。

代码语言:txt
复制
public boolean isExternalStorageWritable() {
      String state = Environment.getExternalStorageState();
      if (Environment.MEDIA_MOUNTED.equals(state)) {
          return true;  
      }   
      return false; 
}

如果外部存储介质可用,就可以创建文件。例如,要在媒体的“图片”目录中创建一个文件,具体的代码如下。

代码语言:txt
复制
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "HelloWorld.png");
评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将文件保存到应用数据文件夹
  • 将文件保存到外部存储
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档