2011年5月1日 星期日

read / write file

這次只有Java和ObjC的內容



Read File


Java

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner; 
public class ReadFile {

public static void main(String[] args) {
Scanner inFile = null;
try {
//讀取text.txt
inFile = new Scanner(new FileReader("text.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(inFile.nextLine());
inFile.close();

}

}


Objective-C

#import <Foundation/NSString.h>

int main( int argc, char *argv[] ) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];

NSString *inFile;
inFile = [NSString 
stringWithContentsOfFile:@"text.txt" 
                encoding:NSUnicodeStringEncoding  
                   error:nil];
NSLog(@"%@", inFile);
[pool release];
return EXIT_SUCCESS;
}


Write File


Java

import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class WriteFile {
public static void main(String[] args) {
PrintWriter outFile = null;
try {
outFile = new PrintWriter("text.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//將「This is an output text.\n」輸入到text.txt
outFile.print("This is an output text.\n");
outFile.close();
}

}

Objective-C

#import <Foundation/NSString.h>

int main( int argc, char *argv[] ) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];

NSString *outFile = @"This is an output text.\n";
[outFile writeToFile:@"text.txt"
          atomically:YES 
            encoding:NSUnicodeStringEncoding 
               error:nil];
[pool release];
return EXIT_SUCCESS;
}




補充資料:

Objective-C各種Encode

請參考NSStringEncoding Enumeration

使用Xcode來執行無法read / write

例如上面obj-c的write file例子,這code如果makefile,然後用終端機(terminal)執行,如下所示:
clang -framework Foundation main.m -o writFileTest
./writFileTest

此時可以write沒問題。
但當你用Xcode時,就不行了……
此時xcode會把編譯出來的東西視為一個iPhone / iPad 應用程式,所以只有這樣寫是無法讀寫文檔的。
要讀寫就要先設定文檔的位置。
/*
* 由path來得到資料夾位置。然後設定documentDirectory為資料夾地址。
* fileName表示說在documentDirectory的位置中的一個叫做「text.txt」的檔案。
*
* 接著由inFile來讀取檔案內容
*
*
* PS : NSDocumentDirectory表示Document資料夾。
* 關於資料夾的資料,請參考下面的Objective-C支援的各種特定資料夾
*/
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths lastObject];
NSString *fileName = [documentDirectory stringByAppendingPathComponent:@"text.txt"];
NSString *inFile;
inFile = [NSString 
stringWithContentsOfFile:fileName
                encoding:NSUnicodeStringEncoding  
                   error:nil];

write file亦同。

補充一下,使用XCode來編譯後,執行的程式會把檔案放在「$HOME/Library/Application/Support/iPhone/Simulator/」裡面的資料夾中。至於具體位置,因為裡面有資料夾是亂碼,加上會因為程式關係(看你是編譯iPhone還是iPad)所以資料夾又會不同。



Objective-C支援的各種特定資料夾

請參考NSSearchPathDirectory Enumeration

沒有留言:

張貼留言