Java中File类的读取方法很多,这里简单地说一下文件的读写。
先以读取文件fileFrom的内容存到fileTo中去。
private static void FIleFromTo(File fileFrom, File fileTo)
throws FileNotFoundException, IOException {
FileInputStream fis=new FileInputStream(fileFrom);
FileOutputStream fos=new FileOutputStream(fileTo);
byte[] b=new byte[fis.available()];
fis.read(b);
fos.write(b);
//最后关闭
fis.close();
fos.close();
}
在main方法中就可以直接调用了:
File fileFrom=new File("e:\\java.txt");
File fileTo=new File("e:\\myself.txt");
FIleFromTo(fileFrom, fileTo);
上面用到了字节流FileInputStream 与FileOutputStream 。下面换成字符流Reader,Writer
private static void FileFromTo1(File fileFrom, File fileTo)
throws FileNotFoundException, IOException {
Reader fr=new FileReader(fileFrom);
Writer fw=new FileWriter(fileTo);
//这里的长度要强转
char[] ch=new char[(int) fileFrom.length()];
fr.read(ch);
fw.write(ch);
//最后关闭
fr.close();
fw.close();
}
这时就可以直接调用了:
File fileFrom=new File("e:\\java.txt");
File fileTo=new File("e:\\myself1111.txt");
FileFromTo1(fileFrom, fileTo);
这里再换成BufferedReader与BufferedWriter
private static void FileFromTo2(File fileFrom, File fileTo) throws IOException {
// 开始读写了
Reader fr = new FileReader(fileFrom);
BufferedReader br = new BufferedReader(fr);
Writer fw = new FileWriter(fileTo);
BufferedWriter bw = new BufferedWriter(fw);
// 将读取的内容存入到字符串中
String str = br.readLine();
while(str!=null){
bw.write(str);
str=br.readLine();
}
// 最后关闭
br.close();
fr.close();
bw.close();
fw.close();
}
```
这里再换成DataInputStream与DataOutputStream二进制流**
先放一张上面这些读写类的关系图:
这里写图片描述
![这里写图片描述](http://img.blog.csdn.net/20160331221726622)
方法代码:
private static void FileFromTo3(File fileFrom, File fileTo) throws IOException{
FileInputStream fis=new FileInputStream(fileFrom);
DataInputStream dis=new DataInputStream(fis);
FileOutputStream fos=new FileOutputStream(fileTo);
DataOutputStream out=new DataOutputStream(fos);
byte [] b=new byte[fis.available()];
dis.read(b);
out.write(b);
// 最后关闭
out.close();
dis.close();
fos.close();
fis.close();
}
记住:
1. 当程序正常运行,发现写入的文件中没有东西时,可以刷新存在文件的文件夹。或者是由于没有写关闭流造成的。
2. 有必要的话在关闭写入流时,加入清空,刷新代码:bw.flush();
3. 当文件中中文出现乱码的时候,记得利用FileInputStream的一个设置编码格式的代码,这时上面的方法估计就不行了。
4. 先看两张图片:
5.
这里要用到:InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
private static void FileFromTo4(File fileFrom, File fileTo) throws IOException {
// 开始读写了
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("e:/my.txt"),"utf-8"));
//分解上面的代码:
//BufferedReader br = new BufferedReade(reader in);这里的参数时reader
//当然上面的reader可以通过Reader fr=FileReader ("路径名");
//FileReader的父级是InputStreamReader,InputStreamReader的父级才是Reader,自然
//利用InputStreamReader中的方法//InputStreamReader(InputStream in, String charsetName)
InputStream is=new FileInputStream(fileFrom);
InputStreamReader isr= new InputStreamReader(is, "gbk");
BufferedReader br = new BufferedReader(isr);
Writer fw = new FileWriter(fileTo);
BufferedWriter bw = new BufferedWriter(fw);
// 将读取的内容存入到字符串中
String str = br.readLine();
while(str!=null){
bw.write(str);
str=br.readLine();
}
// 最后关闭
br.close();
isr.close();
bw.close();
fw.close();
}
上面的方法是绕了点,拆分了就好了。并且多用上面的方法。