欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员_io流的一些基本代码

程序员文章站 2022-06-14 08:44:52
...

------- android培训java培训、期待与您交流! ----------

 

 


使用流,读取文本文件中的信息,将将信息显示在控制台. 考虑使用高效的方式读取. 

       public static void inPutStream(File file) throws IOException {
		// 创建FileInputStream
		FileInputStream fis = new FileInputStream(file);
		// 创建byte数组,用于缓存
		byte[] buffer = new byte[1024];
		// 定义变量,用于获取字节的个数
		int len;
		// 循环读取
		while ((len = fis.read(buffer)) != -1) {
			System.out.print(new String(buffer, 0, len));
		}
		// 关闭流,释放资源
		fis.close();


 使用流,将程序中的信息,保存到指定路径的指定文件中. 考虑快速的写出信息. 可以是一句字符串

public static void outputStream() throws IOException {
		File file2 = new File("E:\\aa.txt");
		String mess = "hello,word";
		// 创建FileOutputStream
		FileOutputStream fos = new FileOutputStream(file2);
		// 写出到文本中,用write--》mess要进行转换用getByte(将String 编码为 byte 序列,并将结果存储到一个新的
		// byte 数组中。)
		fos.write(mess.getBytes());
	}

        

       使用流,实现文件的拷贝,要求可以拷贝任意格式的文件,并提高效率.

	public static void copy(File file) throws IOException {
		File file2 = new File("E:\\copy.zip");
		// 创建字节输入流和输出流
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file2);
		// 定义byte数组,用来缓存,实现高效读取
		byte[] buffer = new byte[1024*8];
		// 定义变量
		int len;
		// 循环读取
		while ((len = fis.read(buffer)) != -1) {
			fos.write(buffer, 0, len);
		}
		// 关闭流,释放资源
		fis.close();
		fos.close();
	}

public static void main(String[] args) throws IOException {
		// 创建File对象
		File file = new File("E:\\qq.zip");
		// inPutStream(file);
		// outputStream();
		copy(file);

	}

      在平常的copy中最好用字节流操作,不要用字符流操作,因为java中基本单位是字节,以字节来copy不会导致数据的流逝。不会造成copy后文件无法读取。

 

      但是,读和写操作还是用字符流操作,因为字节来读取的话,像中文这些一个字符两三个字节的,有字节来读,会造成读半个字符,造成乱码。

 

   字符流:

public static void main(String[] args) throws IOException {
		File file = new File("E:\\a.txt");
		//創建字符輸入流FileReader
		FileReader fr = new FileReader(file);
		//定義字符數組
		char[] buffer = new char[1024*8];
		//定義變量,用來記錄字符的個數
		int len;
		//循環記錄
		while((len=fr.read(buffer))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		//關閉流,釋放資源
		fr.close();
	}

 一次读取一个文本行:

	public static void main(String[] args) throws IOException {

		// 1. 创建字符输入流
		FileReader fr = new FileReader("d:\\a.txt");
		// 2. 创建字符缓冲输入流. 注意: 字符流缓冲流,不能直接关联文件,依赖一个普通字符输入流.
		BufferedReader br = new BufferedReader(fr);

		// 3. 实现高效的读取. 一次读取一行.
		String line;
		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}
		// 4. 关闭流
		br.close();

	}

 一次写一个文本行:

public static void main(String[] args) throws IOException {
		// 1. 创建普通的字符输出流.
		FileWriter fw = new FileWriter("c:\\a.txt");

		// 2. 创建字符输出流的缓冲流.
		BufferedWriter bw = new BufferedWriter(fw);
		// 3. 缓冲流高效的写出数据.,
		bw.write("大家好!!!");
		bw.newLine();
		bw.write("恭喜发财!!!");
		bw.newLine();
		
		//4. 刷新缓冲 
		bw.flush(); 
		bw.close(); 
	}

 合并文本:

	public static void mergeFile4() throws FileNotFoundException, IOException {
		FileInputStream fis1 = new FileInputStream("c:\\a.txt");
		FileInputStream fis2 = new FileInputStream("c:\\b.txt");
		FileInputStream fis3 = new FileInputStream("c:\\c.txt");

		LinkedHashSet<FileInputStream> set = new LinkedHashSet<FileInputStream>();
		set.add(fis1);
		set.add(fis2);
		set.add(fis3);
		final Iterator<FileInputStream> it = set.iterator();

		FileOutputStream fos = new FileOutputStream("c:\\z.txt");

		SequenceInputStream seq = new SequenceInputStream(
				new Enumeration<InputStream>() {

					@Override
					public boolean hasMoreElements() {

						return it.hasNext();
					}

					@Override
					public InputStream nextElement() {

						return it.next();
					}
				});
		int data;
		while ((data = seq.read()) != -1) {
			fos.write(data);
		}

		seq.close();
		fos.close();
	}