package org.jsoft.hw;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class FileCopy {
public static void main(String[] args) {
//这里选择用File提供的方法创建a.txt和b.txt文件
/*创建两个数组,分别用于在a.txt文件中写入26个字母和接受从a.txt中读出26个字母,将读出的
26个字母存储在第二个数组中,并写入b.txt文件*/
char [] src1= new char[26];
char [] dst1= new char[26];
char a='a';
for(int i=0;i<src1.length;i++){
src1[i]=a;
a++;
}
//创建对应的两个文件的路径和文件名称
File src=new File("d:","a.txt"); //相当于源文件
File dst=new File("d:","b.txt"); //相当于目的文件
try {
//创建第一个文件
src.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//创建第二个文件
dst.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Writer w=null; //声明在try-catch语句块外,由于局部的变量不能够在不同的语句块调用,如果不在此声明,则不能在finally中调用close方法
try {
w=new FileWriter(src);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
w.write(src1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Reader方法基本同Writer,故不再做说明
Reader r=null;
try {
r=new FileReader(src);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
r.read(dst1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//再次打开新的输出流,将26个字母写入目的文件
try {
w=new FileWriter(dst);
w.write(dst1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果截图:
package org.jsoft.hw;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestFile {
public static void main(String[] args) {
//创建文件对应的标识符:路径和文件名
File f=new File("d:","test.txt");
/*判断对应的文件是否存在
* 若存在,则在文件末尾追加写入Hello World,这里使用FileOutputStream的第二种构造方法
* 其中的第二个构造参数为true时,则调用write方法时,写入文件末尾
* 若文件不存在,则创建文件,并写入Hello World*/
//文件存在的情况
if(f.exists()){
OutputStream out=null;
try {
out=new FileOutputStream(f,true);
byte p[]={'H','e','l','l','o',' ','W','o','r','l','d'};
out.write(p);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//文件不存在的情况
else{
OutputStream out=null;
try {
out=new FileOutputStream(f);
f.createNewFile();
byte p[]={'H','e','l','l','o',' ','W','o','r','l','d'};
out.write(p);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//读取文件中的内容并输出到控制台
InputStream input=null;
try {
input=new FileInputStream(f);
byte a[]=new byte[(int) f.length()];
input.read(a);
for(byte i:a){
System.out.print((char)i);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
测试结果:
test.txt不存在时
test.txt存在时:
填空题:
FileinputStream:
输入 字节 节点
int 从输入流中读取一个数据字节 读入缓冲区字节的总数
读入缓冲区的字节总数 存储读取数据的缓冲区,目标数组中的起始偏移量,读取的最大字节数
FileOutStream:
抛出异常 创建一个向具有指定名称的文件中写入数据的输出文件流
将字节写入文件末尾处 会
B
以上是本次作业。