Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87350
  • 博文数量: 100
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 658
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-10 08:29
文章分类

全部博文(100)

文章存档

2014年(100)

我的朋友

分类: 信息化

2014-07-24 13:47:39

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); 
阅读(327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~