【问题标题】:How to read a file from certain path如何从特定路径读取文件
【发布时间】:2018-03-15 13:14:31
【问题描述】:

我正在尝试从路径(例如:“/Desktop/folder”)读取和写入文件。如果这无法完成,则从 Documents(例如:“/Documents/folder”)。我看到并尝试了几个示例,但问题是该文件位于以下位置:

file:///Users/name/Library/Developer/CoreSimulator/Devices/AE6A47DE-D6D0-49AE-B39F-25C7A2335DC8/data/Containers/Data/Application/09F890C1-081F-46E7-88BC-F8453BAFC1CB/Documents/测试.txt" 0x00006000000af780

即使我在文档甚至项目中都有“Test.txt”。

这是在上述位置读取和写入文件的代码:

 let file = "Test.txt" //this is the file. we will write to and read from it

    let text = "some text" //just a text

    var text2 = ""

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {

        let fileURL = dir.appendingPathComponent(file)

        //writing
        do {
            try text.write(to: fileURL, atomically: false, encoding: .utf8)
        }
        catch {/* error handling here */print(error)}

        //reading
        do {
             text2 = try String(contentsOf: fileURL, encoding: .utf8)
        }
        catch {/* error handling here */ print(error)}
    }

是否可以从我需要的路径读取和写入文件(例如:“文档/文件夹”)?

【问题讨论】:

  • 您只能读取/写入某些“沙盒”目录,例如 DocumentsCaches(或其中的子目录)。是的,您应该能够读取/写入 Documents/Folder。编辑您的问题以显示执行此操作的代码,而不是上面的代码,它只是尝试写入Documents 中的文件。
  • 我没有从“文档/文件夹”读取的代码,这就是我需要的。
  • 这太多了,无法集成到我的项目中。没有像我发布的从“文档/文件夹”读取文件的代码那样的简短版本吗?
  • 是的。看我的回答。

标签: ios swift file


【解决方案1】:

所以,就像您现在所做的那样,获取文档目录,并附加您需要的路径:

let file = "Test.txt" //this is the file. we will write to and read from it

guard let dir = FileManager.default.urls(for: .documentDirectory, 
  in: .userDomainMask).first { else return }

let subDir = dir.appendingPathComponent("Folder", isDirectory: true)
let fileURL = subDir.appendingPathComponent(file)

请注意,如果子文件夹“文件夹”不存在,则尝试写入该文件 URL 将失败。如果“文件夹”目录不存在,您必须使用文件管理器 createDirectory 调用之一来创建它。

【讨论】:

  • 路径仍然是:"file:///Users/Name/Library/Developer/CoreSimulator/Devices/AE6A47DE-D6D0-49AE-B39F-25C7A2335DC8/data/Containers/Data/Application/E3FE833B -D62B-48D7-B82C-EC8450C0FCDC/Documents/Folder/Test.txt" 0x00006040000b23c0 即使您的更改
  • 实际路径将指向应用程序沙盒文档目录中的文件夹。这就是路径开头的所有内容。”
  • iOS 上没有共享文档目录。每个应用程序都有自己的沙箱,其中包括特定于应用程序的文档目录。
  • 但我需要的文件夹不存在。正如我所看到的,它在上面的路径中创建了一个新文件夹。但是我找到了解决方案。
【解决方案2】:

我找到了解决办法:

  let file = "Test.txt" //this is the file. we will write to and read from it
            let text = "some text" //just a text
            var text2 = ""

            let fileURL = URL(fileURLWithPath: "/Users/name/Documents/Folder/Test.txt")
                //writing
                do {
                    try text.write(to: fileURL, atomically: false, encoding: .utf8)
                }
                catch {/* error handling here */print(error)}
                //reading
                do {
                    text2 = try String(contentsOf: fileURL, encoding: .utf8)
                    var s = ""
                }
                catch {/* error handling here */ print(error)}
            }

【讨论】:

  • 该代码无法在实际(非越狱)设备上运行。 iOS 应用无权访问/Users/username/Documents,只能访问其沙盒文档目录。
  • 确保在实际设备上测试您的代码(它将失败)。请记住,模拟器在 Mac OS 上运行,它具有非常不同的文件系统。您可以在 SIM 卡上执行设备上不允许的操作。
  • 我的错。我忘了提。对于实际的移动应用程序,我不需要它。我需要一个作业,我不应用任何特定于移动设备的东西,只应用语言。
  • 好的,但请理解您所做的事情是错误的,并且不会起作用。它确实在模拟器上工作的事实是一个错误。
  • 我什至不使用模拟器。我只是写在文件中。我将它用作桌面应用程序,我不想用 java 编写应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多