字符串,字典,数组写入本地文件和从本地文件读取,字符串数组
字符串,字典,数组写入本地文件和从本地文件读取,字符串数组
一.字符串,字典,数组存储到本地文件字符串,数组,字典存储到本地文件过程一样,只是要存储的数据类型不同而已,这里以字符串存储到本地文件为例,如下
NSString *content = @"将字符串存储到本地文件";
(1)获取Documents文件夹路径
参数:(1)指定文件夹,(2)设置查找域,(3)是否使用详细路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
(2)拼接上要存储的文件路径(前面自动加上/),如果没有此文件系统会自动创建一个
NSString *newFielPath = [documentsPath stringByAppendingPathComponent:@"aa.txt”];
(3)将内容存储到指定文件路径
NSError *error =
nil;
字符串写入本地文件参数:(1)要存储内容的文件路径,(2)是否使用原子特性,(3)存储格式
BOOL isSucceed = [content writeToFile:newFielPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
二.字符串,字典,数组,从本地文件读取
字符串,字典,数组从本地文件读取的过程一样,只是要读取的数据类型不同而已,这里以从本地文件读取字符串为例,如下
1.获取读取文件的路径
(1)获取Documents文件夹路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
(2)拼接上要存储的文件路径(前面自动加上/),如果没有此文件系统会自动创建一个
NSString *newFielPath = [documentsPath stringByAppendingPathComponent:@"aa.txt”];
(3)读取数据
NSError *error =
nil;(最后也可以&error)
NSString *content = [NSString stringWithContentsOfFile:newFielPath encoding:NSUTF8StringEncoding error:nil]
三.总结
文件读写暂时只支持,NSString,NSArray,NSDictionary,NSData以及他们的子类
写入文件方法:writeToFiel:对象调用方法
读取文件:每个类自带的能够根据文件路径读取文件的方法:[类名 + WithContentOfFiel],如下
NSString :[NSString StringWithContentOfFile:]
NSArry :[NSArry arrayWithContentOfFiel:]NSDictionary :[NSDictionary dictionaryWithOfContentFile:]
二进制流:[NSData dataWithOfContentFiel:] 对于NSArray,NSDictionary ,这种容器,内部成员也必须是能够实现文件读写的八个类之一
设计:
1. 单行存放。student.txt中每行存放一个学生的各项信息,即以换行符为区别各条学生信息。读取的时候从文件中每次提取一行来做属性判断,并筛选;
2. tab隔属性。当然也可以以其他符号,但一般来说,在学生信息内容中,一般不会使用table符号,则可以用table符号来在每行学生信息中分隔每项属性(学号、姓名等),这
样可以通过跃进一个或多个table符号,找到关心的属性,并进行判断(住址头4个字节是否是“广州”、性别属性是否为“女”等)。同时也可以在输出时选择输出部分属性了。
关键代码:
//1. read a single line from a file
char* getFileLine(FILE *argInputFile, char *argLine){
int c;
... ...
for(int i = 0; (c = getc(argInputFile)) != EOF && c != '\n'; i++){
argLine[i] = c;
}
argLine[i] = '\0';
... ...
return argLine;
}
//2. read a single property from the information line
/**
* @param *argStuInfo: some student's information which was read by function 'getFileLine()'
* @param argPropertyNo: the position of the property to be read. e.g.:
* if the properties's order is like this: StuNo. (\t)Name(\t)Gender(\t)Addr(\t)others
* in the student info, and you want to read the gender of this student, then
* you should call this function like this: getProperty(stuInfoLine, 3, gender);
*/
char* getProperty(const char *argStuInfo, const int argPropertyNo, char *argProperty){
... ...
count = 1;
for(int i = 0; (c = getc(argInputFile)) != '\0' && count < argPropertyNo; i++){
if(c == '\t'){
count++;
}
}
for(int i = 0; (c = getc(argInputFile)) != '\0' && c != '\t'; i++){
argPro......余下全文>>
String a[]=new String[]{"a","b","c"};
FileOutputStream fos=null;
try {
fos=new FileOutputStream("D:\\temp\\1.txt",true);//第二个参数设定是否追加文件
PrintWriter pw=new PrintWriter(fos);
for(int i=0;i<a.length;i++){
pw.write(a[i]+"\r\n");
}
pw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
用户评论