Java I/O经典代码实例

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))); 
/** 
* 用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); 
} 
} 
} 



package IO; 

import java.io.*; 
import java.util.*; 

public class FileRW { 
// 需要输入的person数目。 
public static int NUMBER = 3; 

public static void main(String[] args) { 
Person[] people = new Person[NUMBER]; 
// 暂时容纳输入数据的临时字符串数组。 
String[] field = new String[4]; 
// 初始化field数组。 
for (int i = 0; i < 4; i++) { 
field[i] = ""; 
} 
// IO操作必须捕获IO异常。 
try { 
// 用于对field数组进行增加控制。 
int fieldcount = 0; 

// 先使用System.in构造InputStreamReader,再构造BufferedReader。 
BufferedReader stdin = new BufferedReader(new InputStreamReader( 
System.in)); 
for (int i = 0; i < NUMBER; i++) { 
fieldcount = 0; 
System.out.println("The number " + (i + 1) + " person"); 
System.out 
.println("Enter name,age,salary,married(optional),please separate fields by ':'"); 
// 读取一行。 
String personstr = stdin.readLine(); 
// 设置分隔符。 
StringTokenizer st = new StringTokenizer(personstr, ":"); 
// 判断是否还有分隔符可用。 
while (st.hasMoreTokens()) { 
field[fieldcount] = st.nextToken(); 
fieldcount++; 
} 
// 如果输入married,则field[3]不为空,调用具有四个参数的Person构造函数。 
if (field[3] != "") { 
people[i] = new Person(field[0], 
Integer.parseInt(field[1]), Double 
.parseDouble(field[2]), field[3]); 
// 置field[3]为空,以备下次输入使用。 
field[3] = ""; 
} 
// 如果未输入married,则field[3]为空,调用具有三个参数的Person构造函数。 
else { 
people[i] = new Person(field[0], 
Integer.parseInt(field[1]), Double 
.parseDouble(field[2])); 
} 
} 
// 将输入的数据保存至“people.dat”文本文件中。 
PrintWriter out = new PrintWriter(new BufferedWriter( 
new FileWriter("people.dat"))); 
writeData(people, out); 
// 关闭流。 
out.close(); 
// 从文件“people.dat”读取数据。 
BufferedReader in = new BufferedReader(new FileReader("people.dat")); 
Person[] inPeople = readData(in); 
// 关闭流。 
in.close(); 
// 输出从文件中读入的数据。 
for (int i = 0; i < inPeople.length; i++) { 
System.out.println(inPeople[i]); 
} 
} catch (IOException exception) { 
System.err.println("IOException"); 
} 
} 

// 将所有数据写入输出流。 
static void writeData(Person[] p, PrintWriter out) throws IOException { 
// 写入记录条数,即人数。 
out.println(p.length); 
for (int i = 0; i < p.length; i++) { 
p[i].writeData(out); 
} 
} 

// 将所有数据从输入流中读出。 
static Person[] readData(BufferedReader in) throws IOException { 
// 获取记录条数,即人数。 
int n = Integer.parseInt(in.readLine()); 

Person[] p = new Person[n]; 
for (int i = 0; i < n; i++) { 
p[i] = new Person(); 
p[i].readData(in); 
} 
return p; 
} 
} 

class Person { 
private String name; 
private int age; 
private double salary; 
private String married; 

public Person() { 
} 

public Person(String n, int a, double s) { 
name = n; 
age = a; 
salary = s; 
married = "F"; 
} 

public Person(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 toString() { 
return getClass().getName() + "[name=" + name + ",age=" + age 
+ ",salary=" + salary + ",married=" + married + "]"; 
} 

// 写入一条记录,即一个人的数据到输出流。 
public void writeData(PrintWriter out) throws IOException { 
// 格式化输出。 
out.println(name + ":" + age + ":" + salary + ":" + married); 
} 

// 从输入流读入一条记录,即一个人的数据。 
public void readData(BufferedReader in) throws IOException { 
String s = in.readLine(); 
StringTokenizer t = new StringTokenizer(s, ":"); 
name = t.nextToken(); 
age = Integer.parseInt(t.nextToken()); 
salary = Double.parseDouble(t.nextToken()); 
married = t.nextToken(); 
} 
} 



package IO; 

import java.io.IOException; 

public class FileStdRead { 
public static void main(String[] args) throws IOException { 
int b = 0; 
char c = ' '; 
System.out.println("请输入:"); 
while (c != 'q') { 
int a = System.in.read(); 
c = (char) a; 
b++; 
System.out.println((char) a); 
} 
System.err.print("counted    " + b + "    totalbytes."); 
} 

} 
//读取输入的数据,直到数据中有Q这个字母然 


package IO; 

import java.io.*; 

public class IOStreamExample { 
public static void main(String[] args) throws IOException { 
// 1. 读入一行数据: 
BufferedReader in = new BufferedReader(new FileReader( 
"FileStdRead.java")); 
String s, s2 = new String(); 
while ((s = in.readLine()) != null) { 
s2 += s + "
"; 
} 
in.close(); 
BufferedReader stdin = new BufferedReader(new InputStreamReader( 
System.in)); 
System.out.print("Enter a line:"); 
System.out.println(stdin.readLine()); 
// 2. 从内存中读入 
StringReader in2 = new StringReader(s2); 
int c; 
while ((c = in2.read()) != -1) { 
System.out.print((char) c); 
} 
// 3. 格式化内存输入 
try { 
DataInputStream in3 = new DataInputStream(new ByteArrayInputStream( 
s2.getBytes())); 
while (true) { 
System.out.print((char) in3.readByte()); 
} 
} catch (EOFException e) { 
System.err.println("End of stream"); 
} 
// 4. 文件输入 
try { 
BufferedReader in4 = new BufferedReader(new StringReader(s2)); 
PrintWriter out1 = new PrintWriter(new BufferedWriter( 
new FileWriter("IODemo.out"))); 
int lineCount = 1; 
while ((s = in4.readLine()) != null) { 
out1.println(lineCount++ + ": " + s); 
} 
out1.close(); 
} catch (EOFException e) { 
System.err.println("End of stream"); 
} 
// 5. 接收和保存数据 
try { 
DataOutputStream out2 = new DataOutputStream( 
new BufferedOutputStream(new FileOutputStream("Data.txt"))); 
out2.writeDouble(3.14159); 
out2.writeUTF("That was pi"); 
out2.writeDouble(1.41413); 
out2.writeUTF("Square root of 2"); 
out2.close(); 
DataInputStream in5 = new DataInputStream(new BufferedInputStream( 
new FileInputStream("Data.txt"))); 

System.out.println(in5.readDouble()); 

System.out.println(in5.readUTF()); 
System.out.println(in5.readDouble()); 
System.out.println(in5.readUTF()); 
} catch (EOFException e) { 
throw new RuntimeException(e); 
} 
// 6. 随机读取文件内容 
RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw"); 
for (int i = 0; i < 10; i++) { 
rf.writeDouble(i * 1.414); 
} 
rf.close(); 
rf = new RandomAccessFile("rtest.dat", "rw"); 
rf.seek(5 * 8); 
rf.writeDouble(47.0001); 
rf.close(); 
rf = new RandomAccessFile("rtest.dat", "r"); 
for (int i = 0; i < 10; i++) { 
System.out.println("Value " + i + ": " + rf.readDouble()); 
} 
rf.close(); 
} 
} 



package IO; 

import java.io.*; 

/** 
* <p> 
* Title: JAVA进阶诀窍 
* </p> 
* 
*  张峰 
*  1.0 
*/ 
public class MakeDirectoriesExample { 
private static void fileattrib(File f) { 
System.out.println("绝对路径: " + f.getAbsolutePath() + "
 可读属性: " 
+ f.canRead() + "
 可定属性: " + f.canWrite() + "
 文件名: " 
+ f.getName() + "
 父目录: " + f.getParent() + "
 当前路径: " 
+ f.getPath() + "
 文件长度: " + f.length() + "
 最后更新日期: " 
+ f.lastModified()); 
if (f.isFile()) { 
System.out.println("输入的是一个文件"); 
} else if (f.isDirectory()) { 
System.out.println("输入的是一个目录"); 
} 
} 

public static void main(String[] args) { 
if (args.length < 1) { 
args = new String[3]; 
} 
args[0] = "d"; 
args[1] = "test1.txt"; 
args[2] = "test2.txt"; 
File old = new File(args[1]), rname = new File(args[2]); 
old.renameTo(rname); 
fileattrib(old); 
fileattrib(rname); 
int count = 0; 
boolean del = false; 
if (args[0].equals("d")) { 
count++; 
del = true; 
} 
count--; 
while (++count < args.length) { 
File f = new File(args[count]); 
if (f.exists()) { 
System.out.println(f + " 文件己经存在"); 
if (del) { 
System.out.println("删除文件" + f); 
f.delete(); 
} 
} else { // 如果文件不存在 
if (!del) { 
f.mkdirs(); 
System.out.println("创建文件: " + f); 
} 
} 
fileattrib(f); 
} 
} 
}  


你可能感兴趣的:(java,String,File,Class,import,filenames)