java io经典代码

package IO;
import java.io.*;
public class FileDirectoryDemo {
public static void main(String[] args) {
// 如果没有指定参数,则缺省为当前目录。
if (args.length == 0) {
args = new String[] { "." };
try {
// 新建指定目录的File对象。
File currentPath = new File(args[0]);
// 在指定目录新建temp目录的File对象。
File tempPath = new File(currentPath, "temp");
// 用“tempPath”对象在指定目录下创建temp目录。
tempPath.mkdir();
// 在temp目录下创建两个文件。
File temp1 = new File(tempPath, "temp1.txt");
temp1.createNewFile();
File temp2 = new File(tempPath, "temp2.txt");
temp2.createNewFile();

// 递归显示指定目录的内容。
System.out.println("显示指定目录的内容");
listSubDir(currentPath);

// 更改文件名“temp1.txt”为“temp.txt”。
File temp1new = new File(tempPath, "temp.txt");
temp1.renameTo(temp1new);
// 递归显示temp子目录的内容。
System.out.println("更改文件名后,显示temp子目录的内容");
listSubDir(tempPath);

// 删除文件“temp2.txt”。
temp2.delete();
// 递归显示temp子目录的内容。
System.out.println("删除文件后,显示temp子目录的内容");
listSubDir(tempPath);
} catch (IOException e) {
System.err.println("IOException");
// 递归显示指定目录的内容。
static void listSubDir(File currentPath) {
// 取得指定目录的内容列表。
String[] fileNames = currentPath.list();
try {
for (int i = 0; i < fileNames.length; i++) {
File f = new File(currentPath.getPath(), fileNames[i]);
// 如果是目录,则显示目录名后,递归调用,显示子目录的内容。
if (f.isDirectory()) {
// 以规范的路径格式显示目录。
System.out.println(f.getCanonicalPath());
// 递归调用,显示子目录。
listSubDir(f);
// 如果是文件,则显示文件名,不包含路径信息。
else {
System.out.println(f.getName());
} catch (IOException e) {
System.err.println("IOException");
package IO;
import java.io.*;
public class FileExample {
public FileExample() {
super();// 调用父类的构造函数
public static void main(String[] args) {
try {
String outfile = "demoout.xml";
// 定义了一个变量, 用于标识输出文件
String infile = "demoin.xml";
// 定义了一个变量, 用于标识输入文件
DataOutputStream dt = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(outfile)));
/** http://www.huiyi8.com/css3/css3动画 
* 用FileOutputStream定义一个输入流文件,
* 然后用BuferedOutputStream调用FileOutputStream对象生成一个缓冲输出流
* 然后用DataOutputStream调用BuferedOutputStream对象生成数据格式化输出流
*/
BufferedWriter NewFile = new BufferedWriter(new OutputStreamWriter(
dt, "gbk"));// 对中文的处理
DataInputStream rafFile1 = new DataInputStream(
new BufferedInputStream(new FileInputStream(infile)));
/**
*用FileInputStream定义一个输入流文件,
* 然后用BuferedInputStream调用FileInputStream对象生成一个缓冲输出流
* ,其后用DataInputStream中调用BuferedInputStream对象生成数据格式化输出流
*/
BufferedReader rafFile = new BufferedReader(new InputStreamReader(
rafFile1, "gbk"));// 对中文的处理
String xmlcontent = "";
char tag = 0;// 文件用字符零结束
while (tag != (char) (-1)) {
xmlcontent = xmlcontent + tag + rafFile.readLine() + ‘
NewFile.write(xmlcontent);
NewFile.flush();// 清空缓冲区
NewFile.close();
rafFile.close();
System.gc();// 强制立即回收垃圾,即释放内存。
} catch (NullPointerException exc) {
exc.printStackTrace();
} catch (java.lang.IndexOutOfBoundsException outb) {
System.out.println(outb.getMessage());
outb.printStackTrace();
} catch (FileNotFoundException fex) {
System.out.println("fex" + fex.getMessage());
} catch (IOException iex) {
System.out.println("iex" + iex.getMessage());
package IO;
import java.io.*;
public class FileRandomRW {
// 需要输入的person数目。
public static int NUMBER = 3;
public static void main(String[] args) {
Persons[] people = new Persons[NUMBER];
people[0] = new Persons("张峰", 26, 2000, "N");
people[1] = new Persons("艳娜", 25, 50000, "Y");
people[2] = new Persons("李朋", 50, 7000, "F");
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream(
"peoplerandom.dat"));
// 将人员数据保存至“peoplerandom.dat”二进制文件中。
writeData(people, out);
// 关闭流。
out.close();
// 从二进制文件“peoplerandom.dat”中逆序读取数据。
RandomAccessFile inOut = new RandomAccessFile("peoplerandom.dat",
"rw");
Persons[] inPeople = readDataReverse(inOut);
// 输出读入的数据。
System.out.println("原始数据:");
for (int i = 0; i < inPeople.length; i++) {
System.out.println(inPeople[i]);
}
// 修改文件的第三条记录。
inPeople[2].setSalary(4500);
// 将修改结果写入文件。
inPeople[2].writeData(inOut, 3);
// 关闭流。
inOut.close();
// 从文件中读入的第三条记录,并输出,以验证修改结果。
RandomAccessFile in = new RandomAccessFile("peoplerandom.dat", "r");
Persons in3People = new Persons();
// 随机读第三条记录。
in3People.readData(in, 3);
// 关闭流。
in.close();
System.out.println("修改后的记录");
System.out.println(in3People);
} catch (IOException exception) {
System.err.println("IOException");
// 将数据写入输出流。
static void writeData(Persons[] p, DataOutputStream out) throws IOException {
for (int i = 0; i < p.length; i++) {
p[i].writeData(out);
// 将数据从输入流中逆序读出。
static Persons[] readDataReverse(RandomAccessFile in) throws IOException {
// 获得记录数目。
int record_num = (int) (in.length() / Persons.RECORD_LENGTH);
Persons[] p = new Persons[record_num];
// 逆序读取。
for (int i = record_num - 1; i >= 0; i--) {
p[i] = new Persons();
// 文件定位。
in.seek(i * Persons.RECORD_LENGTH);
p[i].readData(in, i + 1);
return p;
class Persons {
private String name;
private int age; // 4个字节
private double salary; // 8个字节
private String married;

public static final int NAME_LENGTH = 20; // 姓名长度
public static final int MARRIED_LENGTH = 2; // 婚否长度
public static final int RECORD_LENGTH = NAME_LENGTH * 2 + 4 + 8
+ MARRIED_LENGTH * 2;
public Persons() {
public Persons(String n, int a, double s) {
name = n;
age = a;
salary = s;
married = "F";
public Persons(String n, int a, double s, String m) {
name = n;
age = a;
salary = s;
married = m;
public String getName() {
return name;
public int getAge() {
return age;
public double getSalary() {
return salary;
public String getMarried() {
return married;
public String setName(String n) {
name = n;
return name;
public int setAge(int a) {
age = a;
return age;
public double setSalary(double s) {
salary = s;
return salary;
public String setMarried(String m) {
married = m;
return married;
// 设置输出格式。
public String toString() {
return getClass().getName() + "[name=" + name + ",age=" + age
+ ",salary=" + salary + ",married=" + married + "]";
// 写入一条固定长度的记录,即一个人的数据到输出流。
public void writeData(DataOutput out) throws IOException {
FixStringIO.writeFixString(name, NAME_LENGTH, out);
out.writeInt(age);
out.writeDouble(salary);
FixStringIO.writeFixString(married, MARRIED_LENGTH, out);
// 写入一条固定长度的记录到随机读取文件中。
private void writeData(RandomAccessFile out) throws IOException {
FixStringIO.writeFixString(name, NAME_LENGTH, out);
out.writeInt(age);
out.writeDouble(salary);
FixStringIO.writeFixString(married, MARRIED_LENGTH, out);
}

// 随机写入一条固定长度的记录到输出流的指定位置。
public void writeData(RandomAccessFile out, int n) throws IOException {
out.seek((n - 1) * RECORD_LENGTH);
writeData(out);
// 从输入流随机读入一条记录,即一个人的数据。
private void readData(RandomAccessFile in) throws IOException {
name = FixStringIO.readFixString(NAME_LENGTH, in);
age = in.readInt();
salary = in.readDouble();
married = FixStringIO.readFixString(MARRIED_LENGTH, in);
}

// 从输入流随机读入指定位置的记录。
public void readData(RandomAccessFile in, int n) throws IOException {
in.seek((n - 1) * RECORD_LENGTH);
readData(in);
}
}

// 对固定长度字符串从文件读出、写入文件
class FixStringIO {
// 读取固定长度的Unicode字符串。
public static String readFixString(int size, DataInput in)
throws IOException {
StringBuffer b = new StringBuffer(size);
int i = 0;
boolean more = true;

while (more && i < size) {
char ch = in.readChar();
i++;
if (ch == 0) {
more = false;
} else {
b.append(ch);
// 跳过剩余的字节。
in.skipBytes(2 * (size - i));
return b.toString();
// 写入固定长度的Unicode字符串。
public static void writeFixString(String s, int size, DataOutput out)
throws IOException {
int i;
for (i = 0; i < size; i++) {
char ch = 0;
if (i < s.length()) {
ch = s.charAt(i);
}
out.writeChar(ch);

java io经典代码

时间: 2024-11-12 05:51:46

java io经典代码的相关文章

Java IO总结(含代码)

从API学起 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节

Java IO详解(转)

IO是Java及众多编程语言很重要的一块,同时很多程序的瓶颈和耗时操作也都在IO这块. 一.简介 IO操作面临很多问题,信息量的巨大,网络的环境等等,因为IO不仅仅是对本地文件.目录的操作,有时对二进制流.还有一部分是网络方面的资源,所以多种原因直接造成IO操作无疑是耗时且复杂多变的.Java对IO的支持是个不断的演变过程,经过了很多的优化,直到JDK1.4以后,才趋于稳定,在JDK1.4中,加入了nio类,解决了很多性能问题,虽然我们有足够的理由不去了解关于Java IO以前的情况,但是为了学

Java IO流以及装饰器模式在其上的运用

流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输入流的谱系如下所示: InputStream和OutputStream InputStream和OutputStream分别是输入输出流的顶级抽象父类,只定义了一些抽象方法供子类实现. 在输出流OutputStream中,如果你需要向一个输出流写入数据,可以调用 void write(int b)

Java IO模型&amp;NIO

Java IO模型&NIO Java IO模型NIO 楔子 概述 网络服务 经典的服务设计 经典的SocketServer循环阻塞 可伸缩目标 分而治之 事件驱动设计 背景知识AWT 事件 Reactor 模式 Reactor基础模式 Java NIO 支持 Channels Buffers Selectors SelectionKeys Reactor 模式实践 第一步初始化 第二步循环分发 第三步接收者 第四步 Handler设置 第五步请求处理 还有一种状态Handler 多线程版本Rea

java IO之输入流——InputStream

java的基本输入流是java.io.InputStream,该抽象类定义了输入流的基本输入操作方法,实现自该抽象类的子类都有定义自己的数据源,例如ByteArrayInputStream的构造函数指定了ByteArrayInputStream输入流的数据源必须是一个字符数组.这就可以有多种不同的数据源,包括:字符数组.String对象.文件."管道".一个由其他种类的流组成的序列... 1 public ByteArrayInputStream(byte buf[]) {} 2 3

Play生产模式下java.io.FileNotFoundException那点事

之前”用Scala+Play构建地理数据查询接口”那篇文章里,用到的数据是json格式的文本文件area.json,存放在conf/jsons文件夹下.最开始是放在public/文件夹下,在线上准生产模式下运行: activator dist 得到mosquito-1.0.zip压缩包,解压后: 去/bin目录下运行mosquito脚本报错: java.io.FileNotFoundException 然后就去解压的mosquito-1.0/看发现并没有public文件夹,由此可见public文

keytool 错误: java.io.FileNotFoundException: 拒绝访问

keytool 错误: java.io.FileNotFoundException: 拒绝访问 打开命令行,切换到D:\AndroidStudioProjects\MyApplication\app目录 keytool 在JDK的/bin目录下,比如:/opt/jdk/bin 用以下的命令生成一个证书: keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore android.key 老是报如题的错误: 后来

Java IO操作:合并流

合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立两个FileInputStream实例对象,用于输出指定两个文件. 2,建立一个FileOutputStream实例,用于合并写入两个文件. 2,通过SequenceInputStream类,把两个文件的内容合并起来,放到这个类实例流中. 3,把SequenceInputStream实例的内容读取出

Java IO详解

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:618528494  我们一起学Java! 初学Java,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是Java io 比较基本的一些处理流