Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
在swift、iOS中读取文件_Ios_Xcode_Swift_Swift Playground - Fatal编程技术网

在swift、iOS中读取文件

在swift、iOS中读取文件,ios,xcode,swift,swift-playground,Ios,Xcode,Swift,Swift Playground,在搜索了很多(很多!)swift游乐场的问题后,我仍然在挣扎 我在包内容的参考资料文件夹中放置了一个文本文件,它作为别名(链接)出现在游乐场生成的运行临时文件中(/var/folders/…) 我在使用TextEdit从.rtf文件创建的.txt文件中看到了这个问题 我在我的游乐场的资源文件夹中加载了一个text.txt文件,使用了与您类似的代码。文件内容是“hello there”,通过更改扩展名将.rtf文件转换为.txt来实现 let path = NSBundle.mainBundle(

在搜索了很多(很多!)swift游乐场的问题后,我仍然在挣扎

我在包内容的
参考资料
文件夹中放置了一个文本文件,它作为别名(链接)出现在游乐场生成的运行临时文件中(
/var/folders/…


我在使用TextEdit从.rtf文件创建的.txt文件中看到了这个问题

我在我的游乐场的资源文件夹中加载了一个text.txt文件,使用了与您类似的代码。文件内容是“hello there”,通过更改扩展名将.rtf文件转换为.txt来实现

let path = NSBundle.mainBundle().pathForResource("text", ofType: "txt")//or rtf for an rtf file
var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)!
println(text)
结果是:

{\rtf1\ansi\ansicpg1252\cooartf1343\cocoasubrtf140 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww10800\viewh8400\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx7920\tx8640\tx8640\PARDIR

\f0\fs24\cf0你好}

所以“hello there”是嵌入的。这就是.rtf文件中所有布局信息的问题

我回到TextEdit并创建了一个true.txt文件。打开文件格式后,生成纯文本


现在,同样的代码给出了控制台输出“hello here”。

您可以尝试创建一个类来打开和保存文件:

更新:Xcode 10•Swift 4.2

class File {
    class func open(_ path: String, encoding: String.Encoding = .utf8) -> String? {
        if FileManager.default.fileExists(atPath: path) {
            do {
                return try String(contentsOfFile: path, encoding: encoding)
            } catch {
                print(error)
                return nil
            }
        }
        return  nil
    }

    class func save(_ path: String, _ content: String, encoding: String.Encoding = .utf8) -> Bool {
        do {
            try content.write(toFile: path, atomically: true, encoding: encoding)
            return true
        } catch {
            print(error)
            return false
        }
    }
}
用法:File.save

let stringToSave: String = "Your text"

let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave) 

if didSave { print("file saved") } else { print("error saving file") } 
用法:File.open

if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
    print(loadedData)
} else {
    println("error reading file")
 }  
如果您更喜欢使用
URL
s(正如我所做的和苹果推荐的那样):
注意在Swift 4中,类
URL
已经存在


如果我将
dict1.txt
文件放在适当的位置,该代码对我来说可以正常工作。你的
dict1.txt
文件中有什么?它与你在
内容
变量中看到的有何不同?@MikeS,你的简单问题让我得到了(显而易见的)答案,这真是令人惊讶。是的,当然
内容
与文件匹配。我永远不会感到累。让我失望的是转义的
'\n'
,它使内容看起来像一条路径控制台输出
println
。关于控制台的更多信息。有用的信息,但显然这个问题不会受到RTF问题的影响。尽管我对自己犯的错误感到很愚蠢,但我确信我不会犯这个错误!
let stringToSave: String = "Your text"

let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave) 

if didSave { print("file saved") } else { print("error saving file") } 
if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
    print(loadedData)
} else {
    println("error reading file")
 }  
class Url {
    class func open(url: URL) -> String? {
        do {
            return try String(contentsOf: url, encoding: String.Encoding.utf8)
        } catch {
            print(error)
            return nil
        }
    }

    class func save(url: URL, fileContent: String) -> Bool {
        do {
            try fileContent.write(to: url, atomically: true, encoding: .utf8)
            return true
        } catch {
            print(error)
            return false
        }
    }
}