1. 程式人生 > >Java I/O流知識綜合實戰

Java I/O流知識綜合實戰

範例:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
 * 優化了上一個Demo的程式碼,新增獲取檔案屬性內容的方法
 * 運用的知識點有:
 *	1.I/O類;
 *	2.Scanner類
 *	3.日期、數字格式化類
 *	4.正則表示式
 *	5.遞迴呼叫
 */

public class SummarizeDemo02 {
	public static void main(String[] args) throws IOException {
		carryOut();
	}

	public static void carryOut() throws IOException {
		String endWords = "執行完畢,返回主介面:";
		System.out.println("歡迎來到《貪玩藍月》檔案作業系統");
		System.out.println("請選擇您需要的操作:");
		System.out.println("1.建立檔案;2.複製檔案;3.對檔案進行內容輸入;4.讀取檔案內容;5.獲取檔案屬性內容");		
		Scanner scan = new Scanner(System.in);
		boolean flag = true;
		while (flag) {
			if (scan.hasNext("[1-5]{1}")) {// 傳入正則表示式,只能輸入1-5
				switch (scan.next()) {
				case "1":// 建立檔案的方法
					creatFile();
					System.out.println(endWords);
					carryOut();
				case "2":// 複製檔案的方法
					copyFile();
					System.out.println(endWords);
					carryOut();
				case "3":// 對檔案進行內容輸入的方法
					outPutFile();
					System.out.println(endWords);
					carryOut();
				case "4":// 讀取檔案內容
					inPutFile();
					System.out.println(endWords);
					carryOut();
				case "5":// 獲取檔案屬性內容
					filePropertis();
					System.out.println(endWords);
					carryOut();
				}
			} else {
				System.out.println("輸入錯誤!返回主頁:");
				carryOut();
			}
		}

	}

	// 1.建立檔案的方法
	public static void creatFile() throws IOException {
		Scanner scan = new Scanner(System.in);
		System.out.println("請輸入您要建立的檔名路徑: ");
		String pathName = scan.next();
		if (!(String.valueOf(pathName.charAt(1)).matches(":"))) {// 正則表示式驗證第二個字元非“:”號,返回自身方法
			System.out.println("輸入格式錯誤,返回上一層");
			creatFile();
		}
		File file = new File(pathName);
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		if (!file.exists()) {
			file.createNewFile();
			System.out.println("建立檔案成功!");
			System.out.println();
		} else if (file.exists()) {
			System.out.println("檔案已經存在!");
			creatFile();// 發生錯誤遞迴呼叫自身方法
		}

	}

	// 2.複製檔案的方法(模仿DOS操作)
	public static void copyFile() throws IOException {
		// 注意:操作檔案的複製只能位元組流,雖然用BufferedReader和PrintStream能複製,但是複製圖片時候,會讓圖片損壞。
		Scanner scan = new Scanner(System.in);
		System.out.println("請輸入您要複製的檔案:");// 原始檔地址
		String pathName01 = scan.next();
		if (!(String.valueOf(pathName01.charAt(1)).matches(":"))) {
			System.out.println("錯誤格式,返回上一層");
			copyFile();// 遞迴呼叫自身的方法
		}
		System.out.println("請輸入你要複製到的檔案位置:");// 目標檔案地址
		String pathName02 = scan.next();
		if (!(String.valueOf(pathName02.charAt(1)).matches(":"))) {// 正則表示式驗證第二個字元非“:”號,返回自身方法
			System.out.println("錯誤格式,返回上一層");
			copyFile();// 發生錯誤遞迴呼叫自身方法
		}
		File oriFile = new File(pathName01);
		File tarFile = new File(pathName02);
		if (!tarFile.getParentFile().exists()) {
			tarFile.getParentFile().mkdirs();
		}
		InputStream in = new FileInputStream(oriFile);
		OutputStream out = new FileOutputStream(tarFile);
		int len = 0;
		byte[] data = new byte[2028];
		while ((len = in.read(data)) != -1) {
			out.write(data, 0, len);
		}
		// 關閉位元組流
		in.close();
		out.close();
		System.out.println("檔案複製成功!返回主頁!");
		System.out.println();
	}

	// 3.對檔案進行內容輸入的方法
	public static void outPutFile() throws IOException {
		System.out.println("請輸入你要操作的檔案:");
		Scanner scan = new Scanner(System.in);
		String pathName = scan.next();
		if (!(String.valueOf(pathName.charAt(1)).matches(":"))) {// 正則表示式驗證第二個字元非“:”號,返回自身方法
			System.out.println("格式錯誤!返回上一層");
			outPutFile();
		}
		File tarFile = new File(pathName);
		if (tarFile.exists()) {
			System.out.println("檔案存在,請輸入內容:");
			String str = scan.next();
			PrintStream ps = new PrintStream(new FileOutputStream(tarFile));
			ps.println(str);
			ps.close();// 關閉輸出流
			System.out.println("操作成功!您輸入的內容是:" + str);
			System.out.println();
		} else if (!tarFile.exists()) {
			System.out.println("檔案不存在!請重新輸入!");
			outPutFile();
		}

	}

	// 4.讀取檔案內容
	public static void inPutFile() throws IOException {
		System.out.println("請輸入您要讀取的檔案路徑:");
		Scanner scan = new Scanner(System.in);
		String pathName = scan.next();
		File tarFile = new File(pathName);
		if (!(String.valueOf(pathName.charAt(1))).matches(":")) {
			System.out.println("格式錯誤,請重新輸入!");
			inPutFile();
		}
		if (!tarFile.exists()) {
			System.out.println("檔案不存在!請重新輸入!");
			inPutFile();
		}
		Scanner readScan = new Scanner(new FileReader(tarFile));//使用Scanner類讀取檔案內容
		readScan.useDelimiter("\n");// 以回車為分隔符
		while (readScan.hasNext()) {
			System.out.println("以下是讀取的內容\n" + readScan.next());
		}
		readScan.close();
	}

	// 5.獲取檔案的屬性
	public static void filePropertis() {
		System.out.println("請輸入您要查詢的檔案:");
		Scanner scan = new Scanner(System.in);
		String pathName = scan.next();
		File tarFile = new File(pathName);
		if (!(String.valueOf(pathName.charAt(1)).matches(":"))) {
			System.out.println("格式錯誤!請重新輸入!");
			filePropertis();
		}
		if (!tarFile.exists()) {
			System.out.println("檔案不存在!請重新輸入!");
			filePropertis();
		}		
		System.out.println("檔案存在,以下內容是檔案屬性:");
		System.out.println("檔案路徑:" + tarFile.getAbsolutePath());
		System.out.println("檔名:" + tarFile.getName());
		System.out.println("檔案大小:" + new BigDecimal((double) (tarFile.length() / 1024)).divide(new BigDecimal(1), 2,
				BigDecimal.ROUND_HALF_UP) + "KB");
		System.out.println(
				"檔案上次修改時間:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(tarFile.lastModified())));
		System.out.println();

	}
}


相關推薦

Java I/O知識綜合實戰

範例:import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOExcep

Java基礎--I/O知識總結

Java基礎–I/O流知識總結 引言 I/O(輸入/輸出)應該算是所有程式都必需的一部分,使用輸入機制,允許程式讀取外部的資料資源、接收使用者輸入;使用輸出機制,允許程式記錄允許狀態,並將資料輸出到外部裝置。Java的IO是通過java.io包下的類和介面來實

Java I/O的總結

註意 size 標記接口 ble ansi 寫入 就會 另一個 span I/O的類結構圖 I/O的分類 根據處理的數據類型分為:字節流和字符流。 根據數據流向分為:輸入流和輸出流。 流又可分為節點流和處理流。 節點流 直接與數據源相連 處理流 與節點流一

java I/O詳解

practice bubuko put bre 技術分享 writer 多媒體 buffered args 概況 I/O流主要分為二大類別:字符流和字節流。 字節流(基本流) 1、字節輸入流 類名:FileInputStream 特點:讀(對文件進行讀取操作)

java I/O 溫習隨筆

就是 電腦 實現類 掌握 直接 一個 簡單 txt文本 stream java I/O流的熟練掌握是十分重要的。 在我的理解中,I/O流可以分為兩種:字符流、字節流。字符流就是可以用來傳輸字符的流,比如傳輸txt文本,簡單的說,只有能被電腦中的記事本直接打開並且你能看懂的文

JAVA-I/O任務

讀取 www. acc dst 學生 基本 方式 htm 特性 作業地址 5. Scanner基本概念組裝對象 編寫public static List 答:要使用到的類有File類,FileInputStream類,InputStreamReader類,Buffere

Java I/O 的幾種典型用法

一.緩衝輸入檔案 public class BufferedReaderFile { public static String read (String filePath){

JAVA I/O的分類

Java中 對檔案的操作是以流的方式進行的。流是Java記憶體中的一組有序資料序列。Java將資料從源(檔案、記憶體、鍵盤、網路)讀入到記憶體中,形成了流,然後將 這些流還可以寫到另外的目的地(檔案、記憶體、控制檯、網路),之所以稱為流,是因為這個資料序列在不同時刻所操作的是源的不同部分。   二、分類  流

[讀書]java I/O的介紹

英文不好,拿來做閱讀練習。。。。一步一步,有些地方可能表達有問題,見諒。 Overview of I/O Streams i/o流的概述 To bring in information, a program opens a stream on an information

Java I/O操作(二)緩衝

IO的緩衝區的存在就是為了提高效率,把要操作的資料放進緩衝區,然後一次性把緩衝區的內容寫到目的地,而不是寫一次就往目的地寫一次.在這裡要注意的是當我們關閉了緩衝區物件實際也關閉了與緩衝區關聯的流物件.BufferWriter類FileWriter fw =null;try{f

Java I/O複習(二)—字元、字元緩衝、以及和位元組的區別

Java I/O流複習(二) 1 字元輸入流 字元流(Java IO的Reader和Writer)功能與InputStream和OutputStream非常類似,InputStream和OutputStream基於位元組處理,而字元流(Reader和Writ

Unix標準輸入/輸出 (I/O) 知識講解

Unix標準 C 庫(因而,每個 Unix 程式)定義了三種Unix標準流:輸入、輸出和錯誤。有時將它們稱為 stdin、stdout 和 stderr,這是在所有 C 程式中用來表示它們的全域性變數。 當您在 Shell 中使用 > 操作符將程式輸出重定向到檔案時,就可以將它的Unix標準輸出 (s

面試必備:詳解Java I/O,掌握這些就可以說精通了?

@TOC Java IO概述 IO就是輸入/輸出。Java IO類庫基於抽象基礎類InputStream和OutputStream構建了一套I/O體系,主要解決從資料來源讀入資料和將資料寫入到目的地問題。我們把資料來源和目的地可以理解為IO流的兩端。當然,通常情況下,這兩端可能是檔案或者網路連線。 我們用下面

Java I/O 複製檔案速度對比

### Java I/O流 複製檔案速度對比 ![截圖2020-09-13 18.41.21](https://tva1.sinaimg.cn/large/007S8ZIlgy1giq2vvgv1vj310u0m6aeb.jpg) 首先來說明如何使用Java的IO流實現檔案的複製: 第一步肯定是要*

深入理解JAVA I/O系列三:字符詳解

buffer 情況 二進制文件 感到 復制代碼 使用範圍 轉換 fileread 方式 字符流為何存在 既然字節流提供了能夠處理任何類型的輸入/輸出操作的功能,那為什麽還要存在字符流呢?容我慢慢道來,字節流不能直接操作Unicode字符,因為一個字符有兩個字節,字節流一次只

Java I/O---Reader & Writer(字符)

dap alt per 讀取數據 ioe != can 創建 兩個類 1.Reader & Writer 當我們初次看見Reader和Writer類時,可能會以為這是兩個用來替代InputStream和OutputStreamt的類,但實際上並非如此。

JAVA-初步認識-I/O(字節流-FileWriter-異常處理)

span 指針 出現 ima bsp file 字節 創建 出現異常 一. 通用換行的知識點是在哪兒介紹的?新建了FileWriter就有異常。 將拋出異常語句去掉後,後面幾句話都會出現異常。 紅色波浪線全部出現就是有異常。 文件找不到異常可以理解,為什麽還有

JAVA-初步認識-I/O(字節流-FileReader-讀取方式1)

結果 奇怪 字節 進行 read file -s 聯想 子類 一. 寫完之後,要進行讀取。現在講解的對象從FileWriter變為了FileReader,從輸出為了輸入。 對於IO流的講解,始終是圍繞著字符流來的,立足點也是字符流中的兩個具體的子類對象。 Reader對象的

JAVA-初步認識-I/O(字符-緩沖區-解釋)

bsp 內部 inf .com 分享 png 緩沖區 com gpo 一. 說完了字符流操作文件的基本對象應用以外, 我以為緩沖區是流對象自己內部,而不是中轉站buf。 這裏就是介紹一下緩沖區,作為一個中轉的地方。緩沖區更為深入的用法,還不會,理解還不夠。JAVA-初步

JAVA-初步認識-I/O(字符-緩沖區-BufferWriter)

講解 技術分享 字符 alt spa 技術 span 分類 為什麽 一. 對於緩沖區,也進行了分類,緩沖讀和緩沖寫。現在講解緩沖寫。 為什麽會有BufferWriter這樣的對象存在,就是將之前的ch,buf之類的東西和流對象結合起來,使它們成為一個整體。 將緩沖的功能融