标签:alt 构造 int 方法 文件 out line try 直接
学习Java在入门中期主要是通过api来学习,不要急慢慢来。
分下下需求,我们需要将文件从一个文件复制到另一个文件夹中 ,这其中我们可以使用很多方法,但在Java中我常用到的是io(废话),主要联系下Javaio中个各类的使用方法顺便看看他们之间有些什么关系。看看下面要使用到的Java软件包:
首先我们先将考虑如何将文件读取到程序中来,在Java的io中(io是Java的软件包)所有的实现类均继承自Writer和Reader两个类(基类),以本次案例来叙述,首先我们把文件读到程序中读这动作使用了FileInputStream类的对象来读取:
我们看到在FileInputStream中的构造方法需要传一个文件File对象,那么我们再看看File对象如何来指明一个文件路径的 :
是的,在File的构造中吧文件的路径和文件名传入就可以找到需要制定的文件,这里说下,如果在该文件夹下无该文件那没程序将出现系统找不到指定的文件的异常。找到文件过后就可以读入文件了,这是读入的数据还是字节流,使用InputStreamReader就可以将字节流转换为字符流了。
public static ArrayList<String> read () throws IOException{ String path = "D:\\sendtest"; String filename = "requst.properties"; FileInputStream fis = null; InputStreamReader in = null ; BufferedReader buf= null; String data = null; ArrayList<String> arr= new ArrayList<String>(); try { fis = new FileInputStream(new File(path,filename)); in = new InputStreamReader(fis); buf = new BufferedReader(in); try { while ((data =buf.readLine())!=null){ System.out.println("data+"+data); arr.add(data); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } if(fis!=null){ fis.close(); } if(in!=null){ in.close(); } if(buf!=null){ buf.close(); } return arr; }
把字节流转换成字符流的目的就是我们读取文件的时候程序将直接将其转换为字符再输出。同样出于效率的因素,我们将在封装一层,从代码中看出来,在InputStreamReader外我们又包装了BufferedReader这个类使用了之后我们读取数据将是 一行一行的读取 即buf.readLine()。
数据读完了我用一个String的数组来保存他,接着我们再使用Writer类来将数据写入到文件中,直接上代码:
public static void write(ArrayList<String> arr) throws IOException{ FileOutputStream fos= null; OutputStreamWriter osw = null; BufferedWriter br= null; try { fos = new FileOutputStream(new File("D:\\sendtest","respone.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); } osw = new OutputStreamWriter(fos); br = new BufferedWriter(osw); for (String str : arr) { try { br.write(str); } catch (IOException e) { e.printStackTrace(); } } try { br.flush(); } catch (IOException e) { e.printStackTrace(); } System.out.println("成功!"); if(fos!=null){ fos.close(); } if(osw!=null){ osw.close(); } if(br!=null){ br.close(); } }
可以看到这部分代码也是在字节流的基础上封装了OutputStreamWriter 字节字符转换桥梁,BufferedWriter和高效率的读取流。需要注意的是br.flush()的含义将数据读到缓冲区中在写入到文件中的必需的方法。
下面是我写的整个类的代码仅供参考了:
package com.qunchen.www; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; 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.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; public class TransferOfData { /** * 读取数据 * 并写入到另一个文件中去 * @throws IOException */ public static ArrayList<String> read () throws IOException{ String path = "D:\\sendtest"; String filename = "requst.properties"; FileInputStream fis = null; InputStreamReader in = null ; BufferedReader buf= null; String data = null; ArrayList<String> arr= new ArrayList<String>(); try { fis = new FileInputStream(new File(path,filename)); in = new InputStreamReader(fis); buf = new BufferedReader(in); try { while ((data =buf.readLine())!=null){ System.out.println("data+"+data); arr.add(data); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } if(fis!=null){ fis.close(); } if(in!=null){ in.close(); } if(buf!=null){ buf.close(); } return arr; } public static void write(ArrayList<String> arr) throws IOException{ FileOutputStream fos= null; OutputStreamWriter osw = null; BufferedWriter br= null; try { fos = new FileOutputStream(new File("D:\\sendtest","respone.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); } osw = new OutputStreamWriter(fos); br = new BufferedWriter(osw); for (String str : arr) { try { br.write(str); } catch (IOException e) { e.printStackTrace(); } } try { br.flush(); } catch (IOException e) { e.printStackTrace(); } System.out.println("成功!"); if(fos!=null){ fos.close(); } if(osw!=null){ osw.close(); } if(br!=null){ br.close(); } } public static void main(String[] args) throws IOException { ArrayList<String> arr = read(); write(arr); } }
这是我的第一篇博客,说实话学习了总结才有收获,希望你我都能实现自己的理想。
Java文件复制器(自己起的名字,主要用于数据搬迁,文件复制等中的使用)
标签:alt 构造 int 方法 文件 out line try 直接
原文地址:http://www.cnblogs.com/chenqun3/p/7650380.html