`

java I/O

阅读更多
/**
 * @author qinglong
 *  java 输入输出实例
 */
public class InputOrOutput {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// test_byte_array_stream();
		// if (test_buffer_read("f:\\testdata\\11.txt", "f:/testdata/22.txt")) {
		// System.out.println("数据已经成功写入");
		// } else {
		// System.out.println("数据写入或读取失败");
		// }
		//test_data_stream();
		copyFile("f:\\testdata","e:\\");
	}

	/**
	 * 将文件读入输入流中。。然后在改变其中的某值 再写回文件
	 * 
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	public static boolean test_char_array_stream(String filename)
			throws IOException {
		File file = new File(filename);

		BufferedReader bufInputReader = new BufferedReader(new FileReader(file));

		// 将文件读入字符数组
		CharArrayWriter charArrayWriter = new CharArrayWriter();

		char[] array = new char[1];
		while (bufInputReader.read(array) != -1) {
			charArrayWriter.write(array);
		}

		charArrayWriter.close();
		bufInputReader.close();

		// 显示字符内容
		array = charArrayWriter.toCharArray();
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}
		System.out.println();

		// 让使用者输入位置与字符修改字符数组内容
		Scanner scanner = new Scanner(System.in);

		System.out.println("输入修改位置");
		int pos = scanner.nextInt();
		System.out.println("输入修改字符");
		char ch = scanner.next().charAt(0);
		array[pos - 1] = ch;

		// 将字符数组内容存回文件
		CharArrayReader charArrayReader = new CharArrayReader(array);

		BufferedWriter bufWriter = new BufferedWriter(new FileWriter(file));

		char[] tmp = new char[1];
		while (charArrayReader.read(tmp) != -1) {
			bufWriter.write(tmp);
		}

		charArrayReader.close();
		bufWriter.flush();
		bufWriter.close();
		return true;
	}

	/**
	 * ByteArrayInputStream 和 ByteArrayOutputStream
	 * 
	 * @return 流的来源或目的地并不一定是文件,也可以是内存中的一块空间,例如一个字节数组
	 *         java.io.ByteArrayInputStream将一个字节数组当作流输入的来源,
	 *         而java.io.ByteArrayOutputStream则可以将一个字节数组当作流输出目的地
	 * @throws IOException
	 */
	public static boolean test_byte_array_stream() throws IOException {
		String str = "qinglonghai";
		byte[] src = str.getBytes();
		ByteArrayInputStream bais = new ByteArrayInputStream(src);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		transform(bais, baos);
		byte[] result = baos.toByteArray();
		System.out.println(new String(result));

		return true;
	}

	public static void transform(InputStream ips, OutputStream ops)
			throws IOException {
		int ch = 0;
		while ((ch = ips.read()) != -1) {
			int upperCh = Character.toUpperCase((char) ch);
			ops.write(upperCh);
		}
	}

	/**
	 * BufferedReader 和 BufferedWriter的使用
	 * 
	 * @param rfileName
	 * @param wfileName
	 * @return
	 * @throws IOException
	 *             FileReader类和FileWriter类:
	 * 
	 *             FileReader类使用字符方法创建文件输入流;FileWriter类是实现以字符方式创建一个输出文件流。
	 * 
	 *             BufferedReader类和BufferedWriter类:
	 * 
	 *             BufferedReader类和BufferedWriter类都是缓冲区,它们是以字符方式缓存流的,
	 *             因此与FileReader类和FileWriter类配合使用。
	 */
	public static boolean test_buffer_read(String rfileName, String wfileName)
			throws IOException {
		BufferedReader bf = new BufferedReader(new FileReader(rfileName));
		BufferedWriter bw = new BufferedWriter(new FileWriter(wfileName, true));// 此处的true表示追加

		String str = null;
		while ((str = bf.readLine()) != null) {
			bw.newLine();// 换行
			bw.write(str);
			bw.flush();
		}

		return true;
	}

	/**
	 * 通过InputStream读取文件内容 通过OutputStream将内容写入文件
	 * 
	 * @param rfileName
	 *            读取文件路径
	 * @param wfileName
	 *            写入路径
	 * @return
	 * @throws IOException
	 * 
	 *             FileInputStream类和FileOutputStream类:
	 *             
	 *             FileInputStream类是文件输入流,它用于接收文件的读取操作;FileOutputStream类是文件的输出流,它用于输出到文件
	 *             。它们都是以字节方式来完成文件的操作。
	 * 
	 *             BufferedInputStream类和BufferedOutputStream类:
	 * 
	 *             BufferedInputStream类是输入缓存;BufferedOutputStream是输出缓存。
	 *             它们通常和FileInputStream类和FileOutputStream类配合使用。也就是说它们也是字节操作的缓存器。
	 */
	public static boolean test_buffered_stream(String rfileName,
			String wfileName) throws IOException {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;

		bis = new BufferedInputStream(new FileInputStream(rfileName));
		bos = new BufferedOutputStream(new FileOutputStream(wfileName));

		byte[] bb = new byte[10];

		while (bis.read(bb) != -1) {
			bos.write(bb);
			bos.write(2);// 写入一个特别的字符
			bos.flush();
		}
		if (bos != null) {
			bos.close();
		}

		return true;
	}

	/**
	 * 利用集合存储数据需 注意
	 * 
	 * @param rfileName
	 * @param wfileName
	 * @return
	 */
	public static boolean test_buffered_stream_array(String rfileName,
			String wfileName) {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			bis = new BufferedInputStream(new FileInputStream(rfileName));
			bos = new BufferedOutputStream(new FileOutputStream(wfileName));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		List<byte[]> slist = new ArrayList<byte[]>();
		byte[] bb = new byte[10];

		try {
			/**
			 * ArrayList里保存的是一组引用,代码里每次不把数组加到ArrayList里去, 数组本身的内容没有被复制,只是引用被复制了
			 * 
			 * 每次写入的都是最后bb里的值
			 */
			while (bis.read(bb) != -1) {
				slist.add(bb);
			}
			/**
			 * 每次读取后将bb的引用指向新new 的一个就可以了
			 */
			while (bis.read(bb) != -1) {
				slist.add(bb);
				bb = new byte[10];
			}
			for (byte[] b : slist) {
				bos.write(b);
				bos.flush();
			}

			if (bos != null) {
				bos.close();
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
			return false;
		}
		return true;
	}

	/**
	 * @param sourceFile
	 * @param targetFile
	 * @throws IOException
	 * 文件目录的复制
	 */
	private static void copyFile(String sourceName, String targetName) throws IOException {
		File sourceFile=new File(sourceName);
		File targetFile=new File(targetName);
		
		File tarpath = new File(targetFile, sourceFile.getName());
		if (sourceFile.isDirectory()) {
			tarpath.mkdir();
			File[] dir = sourceFile.listFiles();
			for (int i = 0; i < dir.length; i++) {
				copyFile(dir[i].getPath(), tarpath.getPath());
			}
		} else {
			InputStream is = new FileInputStream(sourceFile);
			OutputStream os = new FileOutputStream(tarpath);

			byte[] buf = new byte[1024];
			int len = 0;
			while ((len = is.read(buf)) != -1) {
				os.write(buf);
			}
			System.out.println("复制完成");
			is.close();
			os.close();
		}
	}

	/**
	 * 根据类型写入取出
	 * 
	 * @throws IOException
	 * 
	 */
	public static void test_data_stream() throws IOException {
		InputOrOutput mains = new InputOrOutput();
		Member[] members = { mains.new Member(1, 90, "Just青", '0'),
				mains.new Member(2, 95, "momor龙", '1'),
				mains.new Member(3, 88, "Bush海", '1') };

		DataOutputStream dataOutputStream = new DataOutputStream(
				new FileOutputStream("F:\\testdata\\22.txt"));

		for (Member member : members) {
			// 写入UTF字符串
			dataOutputStream.writeUTF(member.getName());
			// 写入int数据
			dataOutputStream.writeInt(member.getAge());
			dataOutputStream.writeInt(member.getId());
			dataOutputStream.writeChar(member.getSex());
		}

		// 所有数据至目的地
		dataOutputStream.flush();
		// 关闭流
		dataOutputStream.close();

		DataInputStream dataInputStream = new DataInputStream(
				new FileInputStream("F:\\testdata\\22.txt"));

		// 读出数据并还原为对象
		for (int i = 0; i < members.length; i++) {
			// 读出UTF字符串
			String name = dataInputStream.readUTF();
			// 读出int数据
			int score = dataInputStream.readInt();
			int id = dataInputStream.readInt();
			char sex = dataInputStream.readChar();
			members[i] = mains.new Member(score, id, name, sex);
		}

		// 关闭流
		dataInputStream.close();

		// 显示还原后的数据
		for (Member member : members) {
			System.out.println(member.getName() + " " + member.getAge() + " "
					+ member.getId() + " " + member.getSex());
		}

	}

	class Member {
		private String name;
		private int age;
		private char sex;
		private int id;

		public Member() {
			super();
		}

		public Member(int age, int id, String name, char sex) {
			super();
			this.age = age;
			this.id = id;
			this.name = name;
			this.sex = sex;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}

		public char getSex() {
			return sex;
		}

		public void setSex(char sex) {
			this.sex = sex;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}
	}
}
分享到:
评论

相关推荐

    Java I/O, 2nd Edition

    《Java I/O, 2nd Edition》是一本深入探讨Java输入/输出系统的重要书籍,针对Java平台的I/O系统提供了全面且深入的指南。这本书在第二版中对Java I/O进行了更新,涵盖了从Java 5到Java 8的最新发展,包括NIO.2(New ...

    java I/O内容

    这是一个关于Java I/O的知识点总结,希望大家共同学习,共同进步

    java I/O类的使用

    Java I/O类库是Java平台的核心部分,它提供了丰富的类用于处理输入和输出操作。这个系统包括了多种类,从简单的字节流到复杂的字符流,以及一系列的装饰器类,用于扩展和增强原始流的功能。 Java 1.0 和 1.1 中的I/...

    Java I/O, NIO and NIO.2

    Java I/O, NIO, 和 NIO.2 是Java平台中处理输入/输出操作的核心组件,对于任何Java开发者来说,理解和掌握这些概念至关重要。本文将深入探讨这些技术,旨在提供一个全面而详尽的概述。 Java I/O(Input/Output)是...

    Java I/O编程 java

    Java I/O 编程是Java开发中的重要组成部分,主要用于处理数据的输入与输出。下面将详细阐述其中的关键概念和方法。 1. 数据流的概念及输入输出方法: 数据流是计算机中进行数据传输的通道,包括从外部设备到程序的...

    Java I/O 过滤流-带格式的读写操作

    在Java编程语言中,输入/输出(I/O)是处理数据传输的核心部分。过滤流(Filter Stream)是Java I/O框架中的一个重要概念,它提供了一种优雅的方式来进行数据的读写操作,同时允许我们添加额外的功能,如字符编码...

    Java I/O 流代码实例大全(01~09)

    Java I/O 流代码实例大全(01~09) File、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

    Java I/O 第二版

    OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...

    深入分析 Java I/O 的工作机制(转载)

    Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...

    Java I/O系统

    Java I/O系统是Java编程语言中的一个重要组成部分,它允许程序进行输入输出操作,与外部世界进行数据交互。在Java中,I/O系统基于流的概念,流可以被视为数据的流动渠道,既可以用来读取数据(输入流),也可以写入...

    Java 新I/O

    Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...

    Java I/O层次结构详解

    Java I/O层次结构详解 Java I/O系统是Java平台中不可或缺的一部分,它为开发者提供了处理输入和输出的强大工具。在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取...

    Java I/O流通讯录

    Java I/O流通讯录是一个基于Java编程语言设计的实用程序,它主要用于演示和学习Java的I/O流操作。在这个项目中,开发者通过I/O流实现了对文件的读写功能,从而构建了一个简单的通讯录系统。这个系统允许用户进行添加...

    Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O

    Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...

    Java I/O总结

    ### Java I/O总结 #### 一、从`new BufferedReader(new InputStreamReader(conn.getInputStream()))`想到的 在Java编程中,处理输入输出(I/O)是一项常见的任务。这段代码`new BufferedReader(new ...

    java i/0习题

    Java I/O(输入/输出)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件、网络连接、系统硬件等。在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题...

    java I/o 详细介绍课件

    java I/o java I/o 详细介绍课件

    Java I/O文件读写/删除/复制等

    Java I/O 文件操作是Java编程中的重要组成部分,它允许开发者处理输入和输出,涉及文件的创建、读取、写入、删除以及复制等任务。在Java中,这些操作主要是通过java.io包提供的类来实现的。下面将详细介绍这些知识点...

    Java I/O 使用和最佳实践

    Java I/O系统是Java编程语言中的一个核心组成部分,它提供了处理输入输出操作的类和接口。这个系统的设计目的是为了使得应用程序能够与外部世界交互,包括读取和写入文件、网络数据、标准输入输出流等。在Java中,I/...

    MaglevIO,一个易于使用和高效的Java I/O库。基于Java NATEVEIO。.zip

    MaglevIO是一个专注于提供易用性和高性能的Java I/O库,其设计灵感来源于Java的非阻塞I/O(Non-blocking I/O,NIO)框架。NIO是Java平台中一个重要的部分,它允许程序在处理大量并发连接时显著提高效率,尤其是在...

Global site tag (gtag.js) - Google Analytics