1. 程式人生 > >java筆記——IO流練習1

java筆記——IO流練習1

重點說明:想要使用一個類的方法,必須瞭解它的方法有哪些,分別如何使用,有什麼用途。因此必須學會檢視Java API,這就相當於學漢字是需要查閱字典,如果單純的敲程式碼,而不知其義,就無法理解為何使用該方法。

目錄

IO練習1:


1.複製文字檔案

          1)位元組流的四種方式

/*位元組流複製文字檔案一共4種方式*/
//方式一
	/**基本位元組流一次讀寫一個位元組:
	 * @throws IOException */
	private static void method1() throws IOException {
		//1.建立基本位元組輸入流物件
		FileInputStream fis=new FileInputStream("a.txt");
		//2.建立基本位元組輸出流物件
		FileOutputStream fos=new FileOutputStream("b.txt");
		//3.開始複製
		int by=0;
		while((by=fis.read())!=-1){
			fos.write(by);
		}
		//4.釋放資源
		fos.close();
		fis.close();
	}

//方式二
/**基本位元組流一次讀寫一個位元組陣列
	 * @throws IOException */
	private static void method2() throws IOException {
		//1.建立基本位元組輸入流物件
				FileInputStream fis=new FileInputStream("a.txt");
				//2.建立基本位元組輸出流物件
				FileOutputStream fos=new FileOutputStream("b.txt");
				//3.開始複製
				byte[] bys=new byte[1024];
				int len=0;
				while((len=fis.read(bys))!=-1){
					fos.write(bys);
				}
				//4.釋放資源
				fos.close();
				fis.close();
	}

//方式三
/**高效位元組流一次讀寫一個位元組
	 * @throws IOException */
	private static void method3() throws IOException {
		//1.建立基本位元組輸入流物件
				BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));
				//2.建立基本位元組輸出流物件
				BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("Cb.txt"));
				//3.開始複製
				int by=0;
				while((by=bis.read())!=-1){
					bos.write(by);
				}
				//4.釋放資源
				bos.close();
				bis.close();
	}

//方式四
/**高效位元組流一次讀寫一個位元組陣列
	 * @throws IOException */
	private static void method4() throws IOException {
		//1.建立基本位元組輸入流物件
		BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));
		//2.建立基本位元組輸出流物件
		BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("b.txt"));
		//3.開始複製
		byte[] bys=new byte[1024];
		int len=0;
		while((len=bis.read(bys))!=-1){
			bos.write(bys);
		}
		//4.釋放資源
		bos.close();
		bis.close();
	}

        2)字元流的5種方式

// 基本字元流,一次讀取一個字元
	private static void method1(String srcPath, String desPath)
			throws IOException {
		FileReader fr = new FileReader(srcPath);
		FileWriter fw = new FileWriter(desPath);

		int ch = 0;
		while ((ch = fr.read()) != -1) {
			fw.write(ch);
		}

		fr.close();
		fw.close();
	}

	// 基本字元流,一次讀取一個字元陣列
	private static void method2(String srcPath, String desPath)
			throws IOException {
		FileReader fr = new FileReader(srcPath);
		FileWriter fw = new FileWriter(desPath);

		char[] chs = new char[1024];
		int len = 0;
		while ((len = fr.read(chs)) != -1) {
			fw.write(chs, 0, len);
		}

		fr.close();
		fw.close();
	}

	// 高效流,一次讀取一個字元
	private static void method3(String srcPath, String desPath)
			throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(srcPath));
		BufferedWriter bw = new BufferedWriter(new FileWriter(desPath));

		int ch = 0;
		while ((ch = br.read()) != -1) {
			bw.write(ch);
			bw.flush();
		}

		br.close();
		bw.close();
	}

	// 高效流,一次讀取一個字元陣列
	private static void method4(String srcPath, String desPath)
			throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(srcPath));
		BufferedWriter bw = new BufferedWriter(new FileWriter(desPath));

		char[] chs = new char[1024];
		int len = 0;
		while ((len = br.read(chs)) != -1) {
			bw.write(chs, 0, len);
			bw.flush();
		}

		br.close();
		bw.close();
	}

	// 高效流,一次讀取一行
	private static void method5(String srcPath, String desPath) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(srcPath));
		BufferedWriter bw = new BufferedWriter(new FileWriter(desPath));

		String line=null;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}

		br.close();
		bw.close();
	}

}


2.複製圖片

/*類似於文字複製,使用位元組流*/


3.把ArrayList集合中的字串資料儲存到文字檔案

public class ArrayListToFileDemo {
	public static void main(String[] args) throws IOException {
		// 建立ArrayList結合物件
		ArrayList<String> array = new ArrayList<String>();
		// 新增集合元素
		array.add("hello");
		array.add("world");
		array.add("java");
		// 封裝目的地
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
		// 遍歷集合,並把每一個元素寫入文字檔案
		for (String s : array) {
			// 寫資料
			bw.write(s);
			// newLine() 寫一行行分隔符。
			bw.newLine();
			// flush() 重新整理流。
			bw.flush();
		}
		//釋放資源
		bw.close();
	}
}


4.從文字檔案中讀取資料(每一行為一個字串資料)到集合中,並遍歷集合

public class FileToArrayListDemo {
	public static void main(String[] args) throws IOException {
		//封裝資料來源
		BufferedReader br=new BufferedReader(new FileReader("a.txt"));
		//建立集合物件
		ArrayList<String> array = new ArrayList<String>();
		//讀取文字檔案,每讀取一行(每一行就是一個字串資料),就新增到集合中
		String line=null;
		//readLine(),讀取一行,如果已達到流的末尾,則為null 
		while((line=br.readLine())!=null){
			array.add(line);
		}
		//釋放資源
		br.close();
		/*//可以遍歷集合,檢視是否成功
		for(String s:array){
			System.out.println(s);
		}*/
	}
}


5.複製單極資料夾

/*
 * 需求:複製單級資料夾:
 * 資料來源:e:\\demo
 * 目的地:e:\\test
 * 
 * 分析:
 * 		A:封裝目錄
 * 		B:獲取該目錄下所有文字的File陣列
 * 		C:遍歷該File陣列,得到每一個File物件
 * 		D:把該File進行復制
 * */
public class CopyFolderDemo {
	public static void main(String[] args) throws IOException {
		//封裝目錄
		File srcFolder=new File("e:\\demo");
		File destFolder=new File("e:\\test");
		//如果目的資料夾不存在就建立
		if(!destFolder.exists()){
			destFolder.mkdir();
		}
		//獲取該目錄下所有文字的File陣列
		File[] fileArray = srcFolder.listFiles();
		//遍歷該File陣列,得到每一個File物件
		for(File file:fileArray){
			String name = file.getName();
			File newFile = new File(destFolder,name);
			copyFile(file,newFile);
		}
	}

	private static void copyFile(File file, File newFile) throws IOException {
		BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
		BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(newFile));
		
		byte[] bys=new byte[1024];
		int len=0;
		while((len=bis.read(bys))!=-1){
			bos.write(bys, 0, len);
		}
		
		bis.close();
		bos.close();
	}
}


6.複製單極資料夾中指定檔案並修改檔名稱

public class CopyFolderDemo {
	public static void main(String[] args) throws IOException {
		// 封裝資料來源
		File srcFolder = new File("e:\\java");
		// 封裝目的地
		File destFolder = new File("e:\\jad");
		// 獲取該目錄下java檔案的File陣列
		File[] fileArray = srcFolder.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				return new File(dir, name).isFile() && name.endsWith(".java");
			}
		});
		// 遍歷該File陣列,獲取每一個File物件
		for (File file : fileArray) {
			// 資料來源:e:\java\DataTypeDemo.java
			// 目的地:e:\\jad\DataTypeDemo.java
			String name = file.getName();
			File newFile=new File(destFolder,name);
			copyFile(file, newFile);//這一步主要是把內容複製過來
		}
		//在目的地目錄下改名
		File[] destFileArray = destFolder.listFiles();
		for(File destFile:destFileArray){
			String name = destFile.getName();
			String newName = name.replace(".java", ".jad");
			File newFile=new File(destFolder,newName);
			destFile.renameTo(newFile);
		}

	}
	private static void copyFile(File file, File newFile) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
				file));
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(newFile));

		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = bis.read(bys)) != -1) {
			bos.write(bys, 0, len);
		}

		bos.close();
		bis.close();
	}
}


7複製多極資料夾

/*
 * 需求:複製多級資料夾
 * 資料來源:E:\JavaSE\day21\code\demos
 * 目的地:E:\\
 * 
 * 分析:
 * 		1.封裝資料來源File
 * 		2.封裝目的地File
 * 		3.判斷該資料夾是檔案還是資料夾
 * 				a:是資料夾
 * 					就在目的地目錄下建立該資料夾
 * 					獲取該File物件下所有檔案或資料夾File物件
 * 					遍歷得到每一個File物件
 * 					回到3
 * 				b:是檔案
 * 					就複製(位元組流)
 * */
public class CopyFoldersDemo {
	public static void main(String[] args) throws IOException {
		// 封裝資料來源File
		File srcFile = new File("E:\\JavaSE\\day21\\code\\demos");
		// 封裝目的地File
		File destFile = new File("E:\\");

		// 複製資料夾的功能
		copyFolder(srcFile, destFile);
	}

	private static void copyFolder(File srcFile, File destFile) throws IOException {
		// 判斷該File是檔案還是資料夾
		if (srcFile.isDirectory()) {
			// 如果是資料夾,就在目的地目錄下建立該資料夾
			File newFolder = new File(destFile, srcFile.getName());
			newFolder.mkdir();
			// 然後獲取該資料夾下的所有檔案或資料夾File物件
			File[] fileArray = srcFile.listFiles();
			for (File file : fileArray) {
				// 遞迴判斷
				copyFolder(file, newFolder);
			}
		} else {
			// 如果是檔案,就直接複製到該目錄下
			File newFile = new File(destFile, srcFile.getName());
			copyFile(srcFile, newFile);
		}
	}

	private static void copyFile(File srcFile, File newFile) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
				srcFile));
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(newFile));

		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = bis.read(bys)) != -1) {
			bos.write(bys, 0, len);
		}

		bos.close();
		bis.close();
	}
}