IO流1作业
上机练习1:
– 文件“我的青春谁做主.txt”位于D盘根目录下,要求将此文件的
内容复制到
– C:\myFile\myPrime.txt中
public class FileReaderWriterTest {
@Test //如果你没有@Test注解的话,使用main方法也是一样的。
public void test() {
FileReader fileReader= null;
FileWriter fileWriter= null;
try {
fileReader = new FileReader("d:/我的青春谁做主.txt");
fileWriter = new FileWriter("c:/myFile/myPrime.txt");
char[] cbuf=new char[1024];
int len;
while ((len=fileReader.read(cbuf))!=-1){
fileWriter.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流资源
if (fileWriter!=null) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileReader!=null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习2:
▪ 复制图片
▪ 将D:\盘指定的图片复制到当前项目中
▪ 需求分析: ▪ 使用字节的输入流FileInputStream读取字节
▪ 使用字节的输入流FileOutputStream写入文件
public class CopyPicture {
@Test
public void test1() {
FileInputStream fileInputStream= null;
FileOutputStream fileOutputStream= null;
try {
fileInputStream = new FileInputStream("d:/皮卡丘.jpg");
fileOutputStream = new FileOutputStream(new File("test/filepractice/皮卡丘.jpg"));
byte[] buffer=new byte[1024];
int len;
while ((len=fileInputStream.read(buffer))!=-1){
fileOutputStream.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流资源
if (fileOutputStream!=null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream!=null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习3:
【1】使用File类的方法去创建一个文本文件,先进行判断
如果没有则创建,如有有则先删除再创建
【2】使用BufferedWriter将如下文字
《虞美人》
春花秋月何时了?
往事知多少。
小楼昨夜又东风,
故国不堪回首月明中。
雕栏玉砌应犹在,
只是朱颜改。
问君能有几多愁?
恰似一江春水向东流。
写入【1】中所创建的文件
【3】再将【2】中写入的文件读取到控制台输出
public class FileTest {
@Test
public void test() {
FileWriter fw= null;
BufferedWriter bw= null;
try {
File file=new File("d:/1");
if (!file.exists()){
file.mkdir();
}
File file1=new File("d:/1/刚哥.txt");
if (!file1.exists()){
file1.createNewFile();
}
fw = new FileWriter(file1);
bw = new BufferedWriter(fw);
bw.write("《虞美人》"+"\n");
bw.write("春花秋月何时了?"+"\n");
bw.write("往事知多少。"+"\n");
bw.write("小楼昨夜又东风,"+"\n");
bw.write("故国不堪回首月明中。"+"\n");
bw.write("雕栏玉砌应犹在,"+"\n");
bw.write("只是朱颜改。"+"\n");
bw.write("问君能有几多愁?"+"\n");
bw.write("恰似一江春水向东流。"+"\n");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw!=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fw!=null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test1() {
File file=new File("d:/2");
if (!file.exists()){
file.mkdir();
}
File file1=new File("d:/2/刚哥.txt");
if (!file1.exists()){
try {
file1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test
public void test2(){
FileReader fr= null;
FileWriter fw= null;
BufferedWriter bw= null;
try {
fr = new FileReader("d:/1/刚哥.txt");
File file=new File("d:/2/刚哥.txt");
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
char[] cbuf=new char[1024];
int len;
while ((len=fr.read(cbuf))!=-1){
bw.write(cbuf,0,len);
System.out.print(new String(cbuf,0,len));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw!=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fw!=null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fr!=null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习4:
▪ 【1】创建User类,包含以下属性name:String,age:int
▪ ,gender enum,重写toString方法显示对象的信息
▪ 【2】使用BufferedWriter写入文件以“,”分隔
▪ 【3】使用BufferedReader读取信息并进行分割,还原成对象,
调用
▪ 对象的toString方法输出对象的信息
1.创建需要的枚举类User
public enum User implements Serializable {
//1.提供当前枚举类的多个对象,多个对象之间用逗号" , "隔开,末尾使用分号" ; "
userInfo1("Jack",18),
userInfo2("Jay",18),
userInfo3("Roman",20);
//2.声明User对象的属性:private final修饰
private final String userName;
private final int age;
//3.私有化类的构造器,并给对象赋值
User(String userName, int age) {
this.userName = userName;
this.age = age;
}
//4.其他诉求1:获取枚举类对象的属性
public String getUserName() {
return userName;
}
public int getAge() {
return age;
}
//4.其他诉求1:提供toString()
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", age=" + age +
'}';
}
}
2.使用BufferedWriter写入文件以“,”分隔
public class BufferedWriterPractice {
@Test
public void test() {
FileWriter fileWriter= null;
BufferedWriter bufferedWriter= null;
try {
File file=new File("d:/content.txt");
fileWriter = new FileWriter(file);
bufferedWriter = new BufferedWriter(fileWriter);
User userInfo1=User.userInfo1;
User userInfo2=User.userInfo2;
User userInfo3=User.userInfo3;
bufferedWriter.write(userInfo1.getUserName()+" , "+userInfo1.getAge()+",");
bufferedWriter.write(userInfo2.getUserName()+" , "+userInfo2.getAge()+",");
bufferedWriter.write(userInfo3.getUserName()+" ,"+userInfo3.getAge());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter!=null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileWriter!=null) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.使用BufferedReader读取信息并进行分割,还原成对象,
调用对象的toString方法输出对象的信息
public class BufferedReaderPractice {
@Test
public void test() {
FileReader fr = null;
BufferedReader br = null;
ObjectInputStream ois = null;
try {
fr = new FileReader("d:/content.txt");
br = new BufferedReader(fr);
File file = new File("d:/content.txt");
char[] cbuf = new char[1024];
int len;
while ((len = br.read(cbuf)) != -1) {
User user =User.valueOf("userInfo1");//valueOf():可以根据对象名去调用信息
User user1 = User.valueOf("userInfo2");
User user2 = User.valueOf("userInfo3");
System.out.println(user.toString());
System.out.println(user1.toString());
System.out.println(user2.toString());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (ois != null) {
ois.close();
}
} catch(IOException e){
e.printStackTrace();
}
try {
if (br!=null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fr!=null) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
IO流2作业
上机练习1:
▪ 将D盘已存在的文件moring.txt中的内容复制到C:盘根目录
▪ 可以使用InputStream,OutputStream字节流的读写
▪ 也可以使用Reader ,Writer字符流的读写
public class CopyDirectory {
@Test
public void test1(){
File src=new File("d:/moring.txt");
File dest=new File("c:/moring.txt");
copy(src,dest);
}
public static void copy(File srcDirectory,File destDirectory) {
InputStream inputStream=null;
OutputStream outputStream=null;
try {
if (srcDirectory.isDirectory()) {
if (!destDirectory.exists()) {
destDirectory.mkdir();
}
String[] list = srcDirectory.list();
for (String file : list) {
File srcFile = new File(srcDirectory, file);
File destFile = new File(destDirectory, file);
copy(srcFile, destFile);//递归,自己调自己
}
} else {//它是一个文件的情况下
inputStream = new FileInputStream(srcDirectory);
outputStream = new FileOutputStream(destDirectory);
//读写操作
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
}
}catch (IOException e) {
e.printStackTrace();
}finally {
if (outputStream!=null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习2:
▪ 需求:将http://www.baidu.com的原文件
▪ 以特定的编码方式读取到控制台输出
▪ 核心代码: ▪ URL url=new URL("http://www.baidu.com");
▪ InputStream is=url.openStream();
public class Baidu {
@Test
public void test() {
BufferedReader br = null;
BufferedWriter bw = null;
try {
//openStream():打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。
br = new BufferedReader(new InputStreamReader(new URL("http://www.baidu.com").openStream(), "utf-8"));
bw = new BufferedWriter(new FileWriter("baidu.html"));
String str = "";
while ((str = br.readLine()) != null) {//readLine()方法是BufferedReader类特有的,到达文件末尾时为null
bw.write(str);
bw.flush();
System.out.println(str);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
finally {
if (bw!=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习3:
使用键盘录入(System.in),将如下诗歌写入文件
《虞美人》
春花秋月何时了?
往事知多少。
小楼昨夜又东风,
故国不堪回首月明中。
雕栏玉砌应犹在,
只是朱颜改。
问君能有几多愁?
恰似一江春水向东流。
再将写入的文件读取到控制台输出System.out。
1.先使用键盘录入(System.in),将诗歌写入文件。
public class InputOutputStreamTest2 {
public static void main(String[] args) {
BufferedReader br= null;
BufferedWriter bw= null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new FileWriter("poetry.txt"));
String str="";
while (!"exit".equals(str)&&!"e".equals(str)){
str=br.readLine();
bw.write(str+"\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw!=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.再将写入的文件读取到控制台输出System.out。
public class InputOutputStreamTest3 {
public static void main(String[] args) {
BufferedReader br= null;
BufferedWriter bufferedWriter= null;
try {
br = new BufferedReader(new FileReader("poetry.txt"));
bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
String str="";
while ((str=br.readLine())!=null){
bufferedWriter.write(str+"\n");
bufferedWriter.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter!=null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
上机练习4:
【1】创建User类,包含以下属性name:String,age:int
,gender enum,重写toString方法显示对象的信息
【2】序列化对象到文件
【3】反序化对象,调用
对象的toString方法输出对象的信息
操作要求:初始化几个对象,存入集合,序列化不反序列化集合。
1.创建需要的枚举类User
public enum User implements Serializable{
// 1.提供当前枚举类的多个对象,对象之间用" , "隔开,末尾使用" ; "
userInfo1("火钳",18),
userInfo2("刘明",18);
//2.声明User对象的属性,private final修饰
private final String userName;
private final int age;
//3.私有化类的构造器,并给对象赋值
private User(String userName, int age) {
this.userName = userName;
this.age = age;
}
//4.其他诉求1:获取枚举类对象的属性
public String getUserName() {
return userName;
}
public int getAge() {
return age;
}
//5.其他诉求2:提供toString()
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", age=" + age +
'}';
}
}
2.序列化对象到文件
public class ObjectOutputStreamExercise {
@Test
public void test(){
ObjectOutputStream oos= null;
try {
//把初始化的对象存入集合
List<User> list=new ArrayList<User>();
list.add(User.userInfo1);
list.add(User.userInfo2);
oos = new ObjectOutputStream(new FileOutputStream("User.txt"));
//序列化集合
oos.writeObject(list);
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
if (oos!=null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.反序列化对象,调用
对象的toString方法输出对象的信息
操作要求:初始化几个对象,存入集合,序列化不反序列化集合。
public class ObjectInputStreamExercise {
@Test
public void test(){
ObjectInputStream ois= null;
try {
//反序列化
ois = new ObjectInputStream(new FileInputStream("User.txt"));
//读取对象
Object o =ois.readObject();
//强转集合
List<User> list= (List<User>) o;
//遍历集合
for (User user : list) {
System.out.println(user.toString());
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (ois!=null) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}