這里有一點(diǎn)需要注意:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了觀(guān)山湖免費(fèi)建站歡迎大家使用!
命名的時(shí)候不能用Info.plist , INfo.plist, xxxInfo.plist等形式,否則會(huì)與系統(tǒng)中存在的Info.plist文件發(fā)生沖突。
點(diǎn)擊Root這一行,然后通過(guò)點(diǎn)擊右鍵-Add Row或者點(diǎn)擊Root后面的加號(hào)來(lái)增加一行。
這一行中包含三個(gè)屬性,key、type、value。其中key是字段屬性,type是字段類(lèi)型,value是字段對(duì)應(yīng)的值。
Type包含7中類(lèi)型,對(duì)寫(xiě)入的數(shù)據(jù)結(jié)構(gòu)應(yīng)屬于7仲:
(NSString,NSData,NSDate,NSNumber,NSArray,NSDictionary)
讀取數(shù)據(jù)
文件是什么類(lèi)型,就用什么類(lèi)型的數(shù)據(jù)來(lái)接收
參考文檔1: iOS開(kāi)發(fā),plist文件讀寫(xiě)那些事
參考文檔2: iOS開(kāi)發(fā)中怎么創(chuàng)建Plist文件
參考文檔3: 【iOS】plist無(wú)法寫(xiě)入的原因
參考文檔4: plist 文件寫(xiě)入與讀取
最近開(kāi)發(fā)一個(gè)藍(lán)牙項(xiàng)目,需要導(dǎo)出和導(dǎo)入EXCEL數(shù)據(jù),由于之前沒(méi)有接觸這類(lèi)功能,查閱了相關(guān)資料,最終選擇采用libxlsxwriter庫(kù)實(shí)現(xiàn)EXCEL文檔生成、CoreXLSX實(shí)現(xiàn)EXCEL文檔內(nèi)容解析,做個(gè)簡(jiǎn)單匯總方便以后查閱,費(fèi)話(huà)不多說(shuō),直接上干貨。
Libxlsxwriter 是一個(gè) C 庫(kù),可用于在 Excel 2007+ XLSX 文件中寫(xiě)入文本、數(shù)字、公式和指向多個(gè)工作表的超鏈接。
具體功能介紹請(qǐng)?zhí)D(zhuǎn)github的庫(kù)地址連接:
1、項(xiàng)目地址
2、使用手冊(cè)地址
因?yàn)轫?xiàng)目是用swift開(kāi)發(fā),所以這里主要簡(jiǎn)單介紹下swift項(xiàng)目下如何使用:
數(shù)據(jù)格式建議采用Array的方式存儲(chǔ)每一組的數(shù)據(jù),方便數(shù)據(jù)寫(xiě)入處理
文件名稱(chēng)根據(jù)實(shí)際需求定義,路徑只需要文件夾路徑拼接文件名即可
創(chuàng)建表格過(guò)程如下:
1、生成一張表格
2、創(chuàng)建一個(gè)sheet
3、設(shè)置表格的樣式、格式(包含文字格式、文字顏色、對(duì)齊方式等)
樣式設(shè)置可參考使用手冊(cè)里的說(shuō)明,這里大概列幾個(gè)供參考:
4、關(guān)閉表格創(chuàng)建
如果格式不對(duì)或者樣式不喜歡,可以結(jié)合實(shí)際重新設(shè)置
QuickLook的框架詳解請(qǐng)查看:
可以通過(guò)QuickLook打開(kāi)EXCEL文檔,同時(shí)QuickLook還集成一系列功能(保存文件、傳送文件等),導(dǎo)出文檔功能可用這個(gè)框架實(shí)現(xiàn),具體如何導(dǎo)出請(qǐng)看框架詳解說(shuō)明即可
可以通過(guò)設(shè)置樣式創(chuàng)建各種復(fù)雜的EXCEL表格,文檔說(shuō)明也非常詳細(xì),用戶(hù)很容易就可以利用該框架創(chuàng)建滿(mǎn)足各種需求的EXCEL表格
沒(méi)有EXCEL讀取功能,因此讀取功能只能另外處理
至此,一個(gè)簡(jiǎn)單的EXCEL創(chuàng)建過(guò)程已經(jīng)完成。libxlsxwriter功能十分強(qiáng)大, 如果要生成一個(gè)復(fù)雜的表格,請(qǐng)仔細(xì)研讀格式設(shè)置說(shuō)明文檔
CoreXLSX是一個(gè)庫(kù),它專(zhuān)注于表示基于XML的XLSX電子表格格式的底層結(jié)構(gòu)。它允許您打開(kāi)擴(kuò)展名為.xlsx的電子表格存檔,并將其內(nèi)部結(jié)構(gòu)映射到直接用Swift表示的模型類(lèi)型中。
需要注意的是,此庫(kù)僅為.xlsx格式提供只讀支持。由于舊的legacy.xls電子表格格式具有完全不同的內(nèi)部結(jié)構(gòu),如果您需要使用該類(lèi)型的文件,請(qǐng)參考其他庫(kù)。
如果您的.xlsx文件使用ECMA-376敏捷加密(這似乎是最流行的一種),請(qǐng)查看CryptoOffice庫(kù)。
項(xiàng)目地址:
可通過(guò)系統(tǒng)提供的API打開(kāi),如下:
可通過(guò)UIDocumentPickerDelegate回調(diào)方法拿到對(duì)應(yīng)的文件路徑, 這里需要注意一個(gè)細(xì)節(jié) ,如下圖
讀取文件時(shí)需要授權(quán),不然有的文件無(wú)法讀取,會(huì)報(bào)沒(méi)有權(quán)限的錯(cuò)誤提示,讀取數(shù)據(jù)完成后,需要關(guān)閉授權(quán)
采用CoreXLSX相關(guān)API去讀取數(shù)據(jù),具體可參考項(xiàng)目文檔說(shuō)明,因?yàn)轫?xiàng)目在讀取數(shù)據(jù)時(shí)需要校驗(yàn)文檔內(nèi)容是否合法,不合法需要提示用戶(hù)重新選擇其他文件,校驗(yàn)規(guī)則可根據(jù)實(shí)際需求去做,以下列舉個(gè)人項(xiàng)目的簡(jiǎn)單校驗(yàn),如下圖
最終rows得到的就是每組的數(shù)據(jù),可通過(guò)遍歷獲取對(duì)應(yīng)的數(shù)據(jù),如有疑問(wèn),請(qǐng)參考官方文檔或者官方DEMO
參考文獻(xiàn):
libxlsxwriter開(kāi)源庫(kù):
CoreXLSX開(kāi)源庫(kù):
XlsxReaderWriterSwift開(kāi)源庫(kù):
謝謝各位的無(wú)私奉獻(xiàn)。。。
非常感謝大家對(duì)我的關(guān)注!?。?!
打開(kāi)文件的方法:
1.獲取文件的沙盒路徑path
2.將path路徑轉(zhuǎn)化URL
3.用webView顯示出來(lái)
一開(kāi)始我用的方法一寫(xiě),但是后來(lái)發(fā)現(xiàn)在高系統(tǒng)上報(bào)錯(cuò)(大概報(bào)錯(cuò)內(nèi)容:NSCocoaErrorDomain:257)。
后來(lái)解決了,做個(gè)記錄。
1、在低于iOS13的系統(tǒng)中。用創(chuàng)建文件夾的形式可以如下:
+ (NSString *)tmpLogPath
{
NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"];
NSString *dirPath = [docPath stringByAppendingPathComponent:@"mylog"];
NSString *filePath = [dirPath stringByAppendingPathComponent:@"tmpLog.txt"];
return filePath;
}
+ (void)writeTmpLog:(NSString *)aMsg
{
NSString *filePath = [[self class] tmpLogPath];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
? ? BOOL isDir = NO;
? ? BOOL hasDir = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:isDir];
? ? if (!hasDir || !isDir) {
? ? ? ? [[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
? ? }
}
NSError *error;
NSString *content =[NSString stringWithContentsOfFile:filePath
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? encoding:NSUTF8StringEncoding
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:error];
NSString *newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
[newContent writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
+ (void)clearTmpLog
{
NSString *filePath = [[self class] tmpLogPath];
[@"" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
2、但是在iOS13上,不能這樣寫(xiě)。系統(tǒng)會(huì)默認(rèn)創(chuàng)建以為***.txt的文件夾,在寫(xiě)入的時(shí)候就出問(wèn)題了。
會(huì)報(bào)錯(cuò):NSCocoaErrorDomain:257 就是
NSFileReadNoPermissionError = 257,/ /讀取錯(cuò)誤(權(quán)限問(wèn)題)
所以可以這樣寫(xiě):
+ (NSString *)tmpLogPath {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"mylog/tmpLog.txt"];
returnfilePath;
}
+ (void)writeTmpLog:(NSString*)aMsg {
NSString*fieldPath = [[self class]tmpLogPath];
NSLog(@"當(dāng)前文件大?。?llu",[self fileSizeWithPath:fieldPath]);
NSFileManager *manager = [NSFileManager defaultManager];
if(![managerfileExistsAtPath:fieldPath]){
? ? NSError*error;
? ? [aMsgwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:error];
? ? if(error) {
? ? ? ? NSLog(@"寫(xiě)入失敗:%@\n",[error localizedDescription]);
? ? }
}else{
? ? NSError*error;
? ? NSError*writeError;
? ? NSString *content =[NSString stringWithContentsOfFile:fieldPath
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? encoding:NSUTF8StringEncoding
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:error];
? ? if(error) {
? ? ? ? NSLog(@"讀取失敗:%@\n",[error localizedDescription]);
? ? }
? ? NSString*newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
? ? [newContentwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:writeError];
? ? if(writeError) {
? ? ? ? NSLog(@"寫(xiě)入失敗:%@\n",[writeErrorlocalizedDescription]);
? ? }
}
}
//獲取文件大小
+ (unsignedlonglong)fileSizeWithPath:(NSString*)path {
signedlonglongfileSize =0;
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManagerfileExistsAtPath:path]) {
? ? NSError*error =nil;
? ? NSDictionary*fileDict = [fileManagerattributesOfItemAtPath:patherror:error];
? ? if(!error fileDict) {
? ? ? ? fileSize = [fileDictfileSize];
? ? }
}
returnfileSize;
}
+ (void)clearTmpLog {
NSError*error;
NSFileManager *manager = [NSFileManager defaultManager];
NSString*filePath = [[selfclass]tmpLogPath];
[managerremoveItemAtPath:filePatherror:error];
if(error) {
? ? NSLog(@"刪除失敗:%@\n",[error localizedDescription]);
}
}
ios關(guān)于文件的讀取有四種方法:
#import foundation foundation.h=""
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//第一種方法: NSFileManager實(shí)例方法讀取數(shù)據(jù)
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSString* thepath = [paths lastObject];
thepath = [thepath stringByAppendingPathComponent:@"fd_list.txt"];
NSLog(@"桌面目錄:%@", thepath);
NSFileManager* fm = [NSFileManager defaultManager];
NSData* data = [[NSData alloc] init];
data = [fm contentsAtPath:thepath];
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
//第二種方法: NSData類(lèi)方法讀取數(shù)據(jù)
data = [NSData dataWithContentsOfFile:thepath];
NSLog(@"NSData類(lèi)方法讀取的內(nèi)容是:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
//第三種方法: NSString類(lèi)方法讀取內(nèi)容
NSString* content = [NSString stringWithContentsOfFile:thepath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"NSString類(lèi)方法讀取的內(nèi)容是:\n%@",content);
//第四種方法: NSFileHandle實(shí)例方法讀取內(nèi)容
NSFileHandle* fh = [NSFileHandle fileHandleForReadingAtPath:thepath];
data = [fh readDataToEndOfFile];
NSLog(@"NSFileHandle實(shí)例讀取的內(nèi)容是:\n%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
return 0;
}
/foundation
當(dāng)前題目:ios開(kāi)發(fā)讀取文件,ios讀取app文件
文章網(wǎng)址:http://aaarwkj.com/article32/dssphpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)