web-dev-qa-db-fra.com

Où placer un fichier .txt et le lire dans un projet IOS

je veux mettre un fichier .txt dans mon Xcode Swift Iphone. Tout d'abord, je le glisse et le dépose simplement de mon bureau vers le dossier des fichiers de support du projet. N'y a-t-il pas un dossier comme sur Android "assets", donc je peux placer mes fichiers où je veux?

Le fichier dans mon exemple s'appelle README.txt qui a un tas de lignes et de paragraphes.

Assez simple, maintenant je veux imprimer le contenu du fichier README.txt dans une vue.

Comment puis-je exécuter la fonction de lecture et quel chemin dois-je insérer si mon fichier se trouve dans le projet /SupportFiles/README.txt?

Merci beaucoup!

30
Felix Me
let path = NSBundle.mainBundle().pathForResource("README", ofType: "txt")
textView.text = String(contentsOfFile: path, 
                             encoding: NSUTF8StringEncoding, 
                                error: nil)

Déposez simplement le fichier n'importe où dans le navigateur de projet et assurez-vous qu'il est ajouté à la bonne cible.

Juste pour développer la réponse, vous pouvez également les placer dans un dossier et utiliser: + pathForResource: ofType: inDirectory: .

34
Mundi

Je recommanderais d'utiliser NSFileManager et de déposer votre fichier n'importe où dans votre projet:

if let path = NSBundle.mainBundle().pathForResource(name, ofType: "txt"){
    let fm = NSFileManager()
    let exists = fm.fileExistsAtPath(path)
    if(exists){
        let c = fm.contentsAtPath(path)
        let cString = NSString(data: c!, encoding: NSUTF8StringEncoding)
        ret = cString as! String
    }
}
8

Swift 4 (merci à @ Pierre-Yves Guillemet pour l'original)

Tant que le fichier est dans votre projet (et a un .txt) cela fonctionnera (dans cet exemple, je suppose que "MyFile.txt" est un fichier qui est dans mon projet):

static func LoadFileAsString() -> ()
{        
    if let path = Bundle.main.path(forResource: "MyFile", ofType: "txt")
    {
        let fm = FileManager()
        let exists = fm.fileExists(atPath: path)
        if(exists){
            let content = fm.contents(atPath: path)
            let contentAsString = String(data: content!, encoding: String.Encoding.utf8)
        }
    }
}
4
Aggressor

Dans Swift 3

guard let path = Bundle.main.path(forResource: "README", ofType: "txt") else {
  return
}

textView.text = try? String(contentsOfFile: path, encoding: String.Encoding.utf8)
4
mokagio

Si vous définissez path's taper et mettre ! fin de ligne, vous ne recevrez aucun avertissement.

 let path:String = NSBundle.mainBundle().pathForResource("README", ofType: "txt")!
 textView.text = String(contentsOfFile: path,
                 encoding: NSUTF8StringEncoding,
                 error: nil)
1
fatihyildizhan

Il y a un Assets.xcassets pour les images et les fichiers. Et voici comment le lire à partir des ressources.

if let data = NSDataAsset(name: "AssetName")?.data {
    textView.text = String(data: data, encoding: .utf8)
}
0
Kimi Chiu