Preciso ler e gravar dados de / para um arquivo de texto, mas não consegui descobrir como.
Encontrei esse código de amostra no iBook do Swift, mas ainda não sei como escrever ou ler dados.
import Cocoa
class DataImporter
{
/*
DataImporter is a class to import data from an external file.
The class is assumed to take a non-trivial amount of time to initialize.
*/
var fileName = "data.txt"
// the DataImporter class would provide data importing functionality here
}
class DataManager
{
@lazy var importer = DataImporter()
var data = String[]()
// the DataManager class would provide data management functionality here
}
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// the DataImporter instance for the importer property has not yet been created”
println(manager.importer.fileName)
// the DataImporter instance for the importer property has now been created
// prints "data.txt”
var str = "Hello World in Swift Language."
//reading
faz exatamente isso.Supondo que você moveu seu arquivo de texto
data.txt
para o seu projeto Xcode (use drag'n'drop e marque "Copiar arquivos se necessário"), você pode fazer o seguinte, como no Objective-C:Atualização:
para ler um arquivo do Bundle (iOS), você pode usar:
Atualização para o Swift 3:
Para Swift 5
fonte
Xcode 8.x • Swift 3.x ou posterior
fonte
Novo método mais simples e recomendado: a Apple recomenda o uso de URLs para manipulação de arquivos e as outras soluções aqui parecem obsoletas (veja os comentários abaixo). A seguir, é apresentada a nova maneira simples de ler e escrever com URLs (não se esqueça de lidar com os possíveis erros de URL):
Swift 5+, 4 e 3.1
fonte
Xcode 8, Swift 3 maneira de ler o arquivo do pacote de aplicativos:
Aqui está uma conveniente extensão de copiar e colar
Por exemplo
Você quase sempre deseja uma matriz de linhas:
fonte
Quero mostrar apenas a primeira parte, que é lida . Veja como você pode simplesmente ler:
Swift 3:
Swift 2:
fonte
Maneira mais simples de ler um arquivo no Swift> 4.0
fonte
A resposta atual aceita acima de Adam teve alguns erros para mim, mas aqui está como refiz a resposta dele e fiz esse trabalho para mim.
fonte
Você pode achar essa ferramenta útil não apenas para ler arquivos no Swift, mas também para analisar sua entrada: https://github.com/shoumikhin/StreamScanner
Basta especificar o caminho do arquivo e os delimitadores de dados como este:
Espero que isto ajude.
fonte
Eu tive que recodificar assim:
fonte
No exemplo de função, (ler | escrever) DocumentsFromFile (...) ter alguns wrappers de função certamente parece fazer sentido, pois tudo no OSx e iOS parece precisar de três ou quatro classes principais instanciadas e um monte de propriedades, configuradas, vinculadas, instanciado e definido apenas para escrever "Oi" em um arquivo, em 182 países.
No entanto, esses exemplos não são completos o suficiente para serem usados em um programa real. A função de gravação não relata erros ao criar ou gravar no arquivo. Na leitura, não acho uma boa ideia retornar um erro de que o arquivo não existe como a sequência que deveria conter os dados lidos. Você gostaria de saber que ela falhou e por que, através de algum mecanismo de notificação, como uma exceção. Em seguida, você pode escrever um código que mostre qual é o problema e permita que o usuário o corrija ou que "corretamente" interrompa o programa nesse momento.
Você não gostaria apenas de retornar uma string com um "arquivo de erro não existe". Em seguida, você teria que procurar o erro na sequência de chamada da função a cada vez e manipulá-la lá. Você também não pode realmente dizer se a sequência de erros foi realmente lida em um arquivo real ou se foi produzida a partir do seu código.
Você não pode nem chamar a leitura assim no swift 2.2 e no Xcode 7.3 porque o NSString (contentsOfFile ...) lança uma exceção. É um erro de tempo de compilação se você não tiver nenhum código para capturá-lo e fazer algo com ele, como imprimi-lo no stdout, ou melhor, em uma janela pop-up de erro ou stderr. Ouvi dizer que a Apple está se afastando do try catch e das exceções, mas será uma mudança longa e não é possível escrever código sem isso. Não sei de onde vem o argumento & error, talvez uma versão mais antiga, mas o NSString.writeTo [File | URL] não possui atualmente um argumento NSError. Eles são definidos assim no NSString.h:
Além disso, o arquivo não existente é apenas um dos vários problemas em potencial que seu programa pode ter ao ler um arquivo, como um problema de permissões, o tamanho do arquivo ou vários outros problemas que você nem gostaria de tentar codificar para um manipulador. cada um deles. É melhor presumir que está tudo correto e capturar e imprimir, ou manipular, uma exceção se algo der errado, além disso, neste momento, você realmente não tem escolha.
Aqui estão minhas reescritas:
fonte
Para o meu arquivo txt funciona desta maneira:
fonte
Para evitar confusão e aumentar a facilidade, criei duas funções para ler e gravar seqüências de caracteres em arquivos no diretório de documentos. Aqui estão as funções:
Aqui está um exemplo de seu uso:
Espero que isto ajude!
Versão Xcode: 6.3.2
fonte
Código swift3 mais recente
Você pode ler dados do arquivo de texto, basta usar o código abaixo Este é o meu arquivo de texto
}
Você pode usar esse código para obter dados do arquivo json de texto no swift3
fonte
Isso funciona com o Swift 3.1.1 no Linux:
fonte
escrever em ViewDidLoad
fonte
As soluções anteriores respondem à pergunta, mas no meu caso, excluir o conteúdo antigo do arquivo enquanto escrevia era um problema.
Então, criei um pedaço de código para gravar em um arquivo no diretório de documentos sem excluir o conteúdo anterior. Você provavelmente precisa de uma melhor manipulação de erros, mas acredito que seja um bom ponto de partida. Swift 4. Uso:
Métodos auxiliares:
fonte
Swift 3.x - 5.x
O melhor exemplo é criar um local
Logfile
com uma extensão.txt
que possa ser visível e mostrada na"Files App"
data e hora atuais como um nome de arquivobasta adicionar este código em info.plist ative esses dois recursos
e esta função abaixo
fonte
fonte
Xcode 8.3.2 Swift 3.x . Usando NSKeyedArchiver e NSKeyedUnarchiver
Lendo arquivo de documentos
Gravar arquivo em documentos
fonte