/**
* @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输入/输出系统的重要书籍,针对Java平台的I/O系统提供了全面且深入的指南。这本书在第二版中对Java I/O进行了更新,涵盖了从Java 5到Java 8的最新发展,包括NIO.2(New ...
这是一个关于Java I/O的知识点总结,希望大家共同学习,共同进步
Java I/O类库是Java平台的核心部分,它提供了丰富的类用于处理输入和输出操作。这个系统包括了多种类,从简单的字节流到复杂的字符流,以及一系列的装饰器类,用于扩展和增强原始流的功能。 Java 1.0 和 1.1 中的I/...
Java I/O, NIO, 和 NIO.2 是Java平台中处理输入/输出操作的核心组件,对于任何Java开发者来说,理解和掌握这些概念至关重要。本文将深入探讨这些技术,旨在提供一个全面而详尽的概述。 Java I/O(Input/Output)是...
Java I/O 编程是Java开发中的重要组成部分,主要用于处理数据的输入与输出。下面将详细阐述其中的关键概念和方法。 1. 数据流的概念及输入输出方法: 数据流是计算机中进行数据传输的通道,包括从外部设备到程序的...
在Java编程语言中,输入/输出(I/O)是处理数据传输的核心部分。过滤流(Filter Stream)是Java I/O框架中的一个重要概念,它提供了一种优雅的方式来进行数据的读写操作,同时允许我们添加额外的功能,如字符编码...
Java I/O 流代码实例大全(01~09) File、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...
Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...
Java I/O系统是Java编程语言中的一个重要组成部分,它允许程序进行输入输出操作,与外部世界进行数据交互。在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平台中不可或缺的一部分,它为开发者提供了处理输入和输出的强大工具。在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取...
Java I/O流通讯录是一个基于Java编程语言设计的实用程序,它主要用于演示和学习Java的I/O流操作。在这个项目中,开发者通过I/O流实现了对文件的读写功能,从而构建了一个简单的通讯录系统。这个系统允许用户进行添加...
Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...
### Java I/O总结 #### 一、从`new BufferedReader(new InputStreamReader(conn.getInputStream()))`想到的 在Java编程中,处理输入输出(I/O)是一项常见的任务。这段代码`new BufferedReader(new ...
Java I/O(输入/输出)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件、网络连接、系统硬件等。在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题...
java I/o java I/o 详细介绍课件
Java I/O 文件操作是Java编程中的重要组成部分,它允许开发者处理输入和输出,涉及文件的创建、读取、写入、删除以及复制等任务。在Java中,这些操作主要是通过java.io包提供的类来实现的。下面将详细介绍这些知识点...
Java I/O系统是Java编程语言中的一个核心组成部分,它提供了处理输入输出操作的类和接口。这个系统的设计目的是为了使得应用程序能够与外部世界交互,包括读取和写入文件、网络数据、标准输入输出流等。在Java中,I/...
MaglevIO是一个专注于提供易用性和高性能的Java I/O库,其设计灵感来源于Java的非阻塞I/O(Non-blocking I/O,NIO)框架。NIO是Java平台中一个重要的部分,它允许程序在处理大量并发连接时显著提高效率,尤其是在...