Java I/O經典代碼執行個體

來源:互聯網
上載者:User
package IO; import java.io.*; public class FileDirectoryDemo { public static void main(String[] args) { // 如果沒有指定參數,則預設為目前的目錄。 if (args.length == 0) { args = new String[] { "." }; } try { // 建立指定目錄的File對象。 File currentPath = new File(args[0]); // 在指定目錄建立temp目錄的File對象。 File tempPath = new File(currentPath, "temp"); // 用“tempPath”對象在指定目錄下建立temp目錄。 tempPath.mkdir(); // 在temp目錄下建立兩個檔案。 File temp1 = new File(tempPath, "temp1.txt"); temp1.createNewFile(); File temp2 = new File(tempPath, "temp2.txt"); temp2.createNewFile(); // 遞迴顯示指定目錄的內容。 System.out.println("顯示指定目錄的內容"); listSubDir(currentPath); // 變更檔名“temp1.txt”為“temp.txt”。 File temp1new = new File(tempPath, "temp.txt"); temp1.renameTo(temp1new); // 遞迴顯示temp子目錄的內容。 System.out.println("變更檔名後,顯示temp子目錄的內容"); listSubDir(tempPath); // 刪除檔案“temp2.txt”。 temp2.delete(); // 遞迴顯示temp子目錄的內容。 System.out.println("刪除檔案後,顯示temp子目錄的內容"); listSubDir(tempPath); } catch (IOException e) { System.err.println("IOException"); } } // 遞迴顯示指定目錄的內容。 static void listSubDir(File currentPath) { // 取得指定目錄的內容列表。 String[] fileNames = currentPath.list(); try { for (int i = 0; i < fileNames.length; i++) { File f = new File(currentPath.getPath(), fileNames[i]); // 如果是目錄,則顯示目錄名後,遞迴調用,顯示子目錄的內容。 if (f.isDirectory()) { // 以規範的路徑格式顯示目錄。 System.out.println(f.getCanonicalPath()); // 遞迴調用,顯示子目錄。 listSubDir(f); } // 如果是檔案,則顯示檔案名稱,不包含路徑資訊。 else { System.out.println(f.getName()); } } } catch (IOException e) { System.err.println("IOException"); } } } package IO; import java.io.*; public class FileExample { public FileExample() { super();// 調用父類的建構函式 } public static void main(String[] args) { try { String outfile = "demoout.xml"; // 定義了一個變數, 用於標識輸出檔案 String infile = "demoin.xml"; // 定義了一個變數, 用於標識輸入檔案 DataOutputStream dt = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(outfile))); /** * 用FileOutputStream定義一個輸入資料流檔案, * 然後用BuferedOutputStream調用FileOutputStream對象產生一個緩衝輸出資料流 * 然後用DataOutputStream調用BuferedOutputStream對象產生資料格式化輸出資料流 */ BufferedWriter NewFile = new BufferedWriter(new OutputStreamWriter( dt, "gbk"));// 對中文的處理 DataInputStream rafFile1 = new DataInputStream( new BufferedInputStream(new FileInputStream(infile))); /** *用FileInputStream定義一個輸入資料流檔案, * 然後用BuferedInputStream調用FileInputStream對象產生一個緩衝輸出資料流 * ,其後用DataInputStream中調用BuferedInputStream對象產生資料格式化輸出資料流 */ BufferedReader rafFile = new BufferedReader(new InputStreamReader( rafFile1, "gbk"));// 對中文的處理 String xmlcontent = ""; char tag = 0;// 檔案用字元零結束 while (tag != (char) (-1)) { xmlcontent = xmlcontent + tag + rafFile.readLine() + ''; } NewFile.write(xmlcontent); NewFile.flush();// 清空緩衝區 NewFile.close(); rafFile.close(); System.gc();// 強制立即回收垃圾,即釋放記憶體。 } catch (NullPointerException exc) { exc.printStackTrace(); } catch (java.lang.IndexOutOfBoundsException outb) { System.out.println(outb.getMessage()); outb.printStackTrace(); } catch (FileNotFoundException fex) { System.out.println("fex" + fex.getMessage()); } catch (IOException iex) { System.out.println("iex" + iex.getMessage()); } } } package IO; import java.io.*; public class FileRandomRW { // 需要輸入的person數目。 public static int NUMBER = 3; public static void main(String[] args) { Persons[] people = new Persons[NUMBER]; people[0] = new Persons("張峰", 26, 2000, "N"); people[1] = new Persons("豔娜", 25, 50000, "Y"); people[2] = new Persons("李朋", 50, 7000, "F"); try { DataOutputStream out = new DataOutputStream(new FileOutputStream( "peoplerandom.dat")); // 將人員資料儲存至“peoplerandom.dat”二進位檔案中。 writeData(people, out); // 關閉流。 out.close(); // 從二進位檔案“peoplerandom.dat”中逆序讀取資料。 RandomAccessFile inOut = new RandomAccessFile("peoplerandom.dat", "rw"); Persons[] inPeople = readDataReverse(inOut); // 輸出讀入的資料。 System.out.println("未經處理資料:"); for (int i = 0; i < inPeople.length; i++) { System.out.println(inPeople[i]); } // 修改檔案的第三條記錄。 inPeople[2].setSalary(4500); // 將修改結果寫入檔案。 inPeople[2].writeData(inOut, 3); // 關閉流。 inOut.close(); // 從檔案中讀入的第三條記錄,並輸出,以驗證修改結果。 RandomAccessFile in = new RandomAccessFile("peoplerandom.dat", "r"); Persons in3People = new Persons(); // 隨機讀第三條記錄。 in3People.readData(in, 3); // 關閉流。 in.close(); System.out.println("修改後的記錄"); System.out.println(in3People); } catch (IOException exception) { System.err.println("IOException"); } } // 將資料寫入輸出資料流。 static void writeData(Persons[] p, DataOutputStream out) throws IOException { for (int i = 0; i < p.length; i++) { p[i].writeData(out); } } // 將資料從輸入資料流中逆序讀出。 static Persons[] readDataReverse(RandomAccessFile in) throws IOException { // 獲得記錄數目。 int record_num = (int) (in.length() / Persons.RECORD_LENGTH); Persons[] p = new Persons[record_num]; // 逆序讀取。 for (int i = record_num - 1; i >= 0; i--) { p[i] = new Persons(); // 檔案定位。 in.seek(i * Persons.RECORD_LENGTH); p[i].readData(in, i + 1); } return p; } } class Persons { private String name; private int age; // 4個位元組 private double salary; // 8個位元組 private String married; public static final int NAME_LENGTH = 20; // 姓名長度 public static final int MARRIED_LENGTH = 2; // 婚否長度 public static final int RECORD_LENGTH = NAME_LENGTH * 2 + 4 + 8 + MARRIED_LENGTH * 2; public Persons() { } public Persons(String n, int a, double s) { name = n; age = a; salary = s; married = "F"; } public Persons(String n, int a, double s, String m) { name = n; age = a; salary = s; married = m; } public String getName() { return name; } public int getAge() { return age; } public double getSalary() { return salary; } public String getMarried() { return married; } public String setName(String n) { name = n; return name; } public int setAge(int a) { age = a; return age; } public double setSalary(double s) { salary = s; return salary; } public String setMarried(String m) { married = m; return married; } // 設定輸出格式。 public String toString() { return getClass().getName() + "[name=" + name + ",age=" + age + ",salary=" + salary + ",married=" + married + "]"; } // 寫入一條固定長度的記錄,即一個人的資料到輸出資料流。 public void writeData(DataOutput out) throws IOException { FixStringIO.writeFixString(name, NAME_LENGTH, out); out.writeInt(age); out.writeDouble(salary); FixStringIO.writeFixString(married, MARRIED_LENGTH, out); } // 寫入一條固定長度的記錄到隨機讀取檔案中。 private void writeData(RandomAccessFile out) throws IOException { FixStringIO.writeFixString(name, NAME_LENGTH, out); out.writeInt(age); out.writeDouble(salary); FixStringIO.writeFixString(married, MARRIED_LENGTH, out); } // 隨機寫入一條固定長度的記錄到輸出資料流的指定位置。 public void writeData(RandomAccessFile out, int n) throws IOException { out.seek((n - 1) * RECORD_LENGTH); writeData(out); } // 從輸入資料流隨機讀入一條記錄,即一個人的資料。 private void readData(RandomAccessFile in) throws IOException { name = FixStringIO.readFixString(NAME_LENGTH, in); age = in.readInt(); salary = in.readDouble(); married = FixStringIO.readFixString(MARRIED_LENGTH, in); } // 從輸入資料流隨機讀入指定位置的記錄。 public void readData(RandomAccessFile in, int n) throws IOException { in.seek((n - 1) * RECORD_LENGTH); readData(in); } } // 對固定長度字串從檔案讀出、寫入檔案 class FixStringIO { // 讀取固定長度的Unicode字串。 public static String readFixString(int size, DataInput in) throws IOException { StringBuffer b = new StringBuffer(size); int i = 0; boolean more = true; while (more && i < size) { char ch = in.readChar(); i++; if (ch == 0) { more = false; } else { b.append(ch); } } // 跳過剩餘的位元組。 in.skipBytes(2 * (size - i)); return b.toString(); } // 寫入固定長度的Unicode字串。 public static void writeFixString(String s, int size, DataOutput out) throws IOException { int i; for (i = 0; i < size; i++) { char ch = 0; if (i < s.length()) { ch = s.charAt(i); } out.writeChar(ch); } } } package IO; import java.io.*; import java.util.*; public class FileRW { // 需要輸入的person數目。 public static int NUMBER = 3; public static void main(String[] args) { Person[] people = new Person[NUMBER]; // 暫時容納輸入資料的臨時字串數組。 String[] field = new String[4]; // 初始化field數組。 for (int i = 0; i < 4; i++) { field[i] = ""; } // IO操作必須捕獲IO異常。 try { // 用於對field數組進行增加控制。 int fieldcount = 0; // 先使用System.in構造InputStreamReader,再構造BufferedReader。 BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in)); for (int i = 0; i < NUMBER; i++) { fieldcount = 0; System.out.println("The number " + (i + 1) + " person"); System.out .println("Enter name,age,salary,married(optional),please separate fields by ':'"); // 讀取一行。 String personstr = stdin.readLine(); // 設定分隔字元。 StringTokenizer st = new StringTokenizer(personstr, ":"); // 判斷是否還有分隔字元可用。 while (st.hasMoreTokens()) { field[fieldcount] = st.nextToken(); fieldcount++; } // 如果輸入married,則field[3]不為空白,調用具有四個參數的Person建構函式。 if (field[3] != "") { people[i] = new Person(field[0], Integer.parseInt(field[1]), Double .parseDouble(field[2]), field[3]); // 置field[3]為空白,以備下次輸入使用。 field[3] = ""; } // 如果未輸入married,則field[3]為空白,調用具有三個參數的Person建構函式。 else { people[i] = new Person(field[0], Integer.parseInt(field[1]), Double .parseDouble(field[2])); } } // 將輸入的資料儲存至“people.dat”文字檔中。 PrintWriter out = new PrintWriter(new BufferedWriter( new FileWriter("people.dat"))); writeData(people, out); // 關閉流。 out.close(); // 從檔案“people.dat”讀取資料。 BufferedReader in = new BufferedReader(new FileReader("people.dat")); Person[] inPeople = readData(in); // 關閉流。 in.close(); // 輸出從檔案中讀入的資料。 for (int i = 0; i < inPeople.length; i++) { System.out.println(inPeople[i]); } } catch (IOException exception) { System.err.println("IOException"); } } // 將所有資料寫入輸出資料流。 static void writeData(Person[] p, PrintWriter out) throws IOException { // 寫入記錄條數,即人數。 out.println(p.length); for (int i = 0; i < p.length; i++) { p[i].writeData(out); } } // 將所有資料從輸入資料流中讀出。 static Person[] readData(BufferedReader in) throws IOException { // 擷取記錄條數,即人數。 int n = Integer.parseInt(in.readLine()); Person[] p = new Person[n]; for (int i = 0; i < n; i++) { p[i] = new Person(); p[i].readData(in); } return p; } } class Person { private String name; private int age; private double salary; private String married; public Person() { } public Person(String n, int a, double s) { name = n; age = a; salary = s; married = "F"; } public Person(String n, int a, double s, String m) { name = n; age = a; salary = s; married = m; } public String getName() { return name; } public int getAge() { return age; } public double getSalary() { return salary; } public String getMarried() { return married; } // 設定輸出格式。 public String toString() { return getClass().getName() + "[name=" + name + ",age=" + age + ",salary=" + salary + ",married=" + married + "]"; } // 寫入一條記錄,即一個人的資料到輸出資料流。 public void writeData(PrintWriter out) throws IOException { // 格式化輸出。 out.println(name + ":" + age + ":" + salary + ":" + married); } // 從輸入資料流讀入一條記錄,即一個人的資料。 public void readData(BufferedReader in) throws IOException { String s = in.readLine(); StringTokenizer t = new StringTokenizer(s, ":"); name = t.nextToken(); age = Integer.parseInt(t.nextToken()); salary = Double.parseDouble(t.nextToken()); married = t.nextToken(); } } package IO; import java.io.IOException; public class FileStdRead { public static void main(String[] args) throws IOException { int b = 0; char c = ' '; System.out.println("請輸入:"); while (c != 'q') { int a = System.in.read(); c = (char) a; b++; System.out.println((char) a); } System.err.print("counted    " + b + "    totalbytes."); } } //讀取輸入的資料,直到資料中有Q這個字母然 package IO; import java.io.*; public class IOStreamExample { public static void main(String[] args) throws IOException { // 1. 讀入一行資料: BufferedReader in = new BufferedReader(new FileReader( "FileStdRead.java")); String s, s2 = new String(); while ((s = in.readLine()) != null) { s2 += s + ""; } in.close(); BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in)); System.out.print("Enter a line:"); System.out.println(stdin.readLine()); // 2. 從記憶體中讀入 StringReader in2 = new StringReader(s2); int c; while ((c = in2.read()) != -1) { System.out.print((char) c); } // 3. 格式化記憶體輸入 try { DataInputStream in3 = new DataInputStream(new ByteArrayInputStream( s2.getBytes())); while (true) { System.out.print((char) in3.readByte()); } } catch (EOFException e) { System.err.println("End of stream"); } // 4. 檔案輸入 try { BufferedReader in4 = new BufferedReader(new StringReader(s2)); PrintWriter out1 = new PrintWriter(new BufferedWriter( new FileWriter("IODemo.out"))); int lineCount = 1; while ((s = in4.readLine()) != null) { out1.println(lineCount++ + ": " + s); } out1.close(); } catch (EOFException e) { System.err.println("End of stream"); } // 5. 接收和儲存資料 try { DataOutputStream out2 = new DataOutputStream( new BufferedOutputStream(new FileOutputStream("Data.txt"))); out2.writeDouble(3.14159); out2.writeUTF("That was pi"); out2.writeDouble(1.41413); out2.writeUTF("Square root of 2"); out2.close(); DataInputStream in5 = new DataInputStream(new BufferedInputStream( new FileInputStream("Data.txt"))); System.out.println(in5.readDouble()); System.out.println(in5.readUTF()); System.out.println(in5.readDouble()); System.out.println(in5.readUTF()); } catch (EOFException e) { throw new RuntimeException(e); } // 6. 隨機讀取檔案內容 RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw"); for (int i = 0; i < 10; i++) { rf.writeDouble(i * 1.414); } rf.close(); rf = new RandomAccessFile("rtest.dat", "rw"); rf.seek(5 * 8); rf.writeDouble(47.0001); rf.close(); rf = new RandomAccessFile("rtest.dat", "r"); for (int i = 0; i < 10; i++) { System.out.println("Value " + i + ": " + rf.readDouble()); } rf.close(); } } package IO; import java.io.*; /** * <p> * Title: JAVA進階訣竅 * </p> * *  張峰 *  1.0 */ public class MakeDirectoriesExample { private static void fileattrib(File f) { System.out.println("絕對路徑: " + f.getAbsolutePath() + " 可讀屬性: " + f.canRead() + " 可定屬性: " + f.canWrite() + " 檔案名稱: " + f.getName() + " 父目錄: " + f.getParent() + " 當前路徑: " + f.getPath() + " 檔案長度: " + f.length() + " 最後更新日期: " + f.lastModified()); if (f.isFile()) { System.out.println("輸入的是一個檔案"); } else if (f.isDirectory()) { System.out.println("輸入的是一個目錄"); } } public static void main(String[] args) { if (args.length < 1) { args = new String[3]; } args[0] = "d"; args[1] = "test1.txt"; args[2] = "test2.txt"; File old = new File(args[1]), rname = new File(args[2]); old.renameTo(rname); fileattrib(old); fileattrib(rname); int count = 0; boolean del = false; if (args[0].equals("d")) { count++; del = true; } count--; while (++count < args.length) { File f = new File(args[count]); if (f.exists()) { System.out.println(f + " 檔案己經存在"); if (del) { System.out.println("刪除檔案" + f); f.delete(); } } else { // 如果檔案不存在 if (!del) { f.mkdirs(); System.out.println("建立檔案: " + f); } } fileattrib(f); } } }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.