最近在看JAVA核心技术,本以为想看懂一些文件流,还有一些东西,但是自己没有理解。
这里我在网上总结的一些文件流的知识,希望可以对大家理解有帮助!!
什么是流?
流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。
那么
如何判断流是输入流还是输出流?
以内存为参照物,如果数据是向内存流动是输入流, 反之则是输出流
java流分为两种流
1,字节流:可以用于读写二进制文件及任何类型文件byte
2,字符流:可以用于读写文件文本
字节流:输入(InputStream) 输出(OutputStream)
字符流:输入(Reader)
下面的例子和注释是分别对应着文件流的几个功能的实战:
1、
测试文件属性,首先自己新建一个文件在E:盘下的根目录。
取名字叫做
测试文件.txt
然后运行下列代码:
创建文件
package io;
import java.io.File;
public class IoTest {
public IoTest(){
}
public void IoTest(){
//创建一个文件对象
File ff = new File("E:\\测试文件.txt");
//输出详细信息
System.out.println("文件路径 : " + ff.getAbsolutePath());
System.out.println("文件大小 : " + ff.length());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IoTest io = new IoTest();
io.IoTest();
}
}
2、创建文件和文件夹
package io;
import java.io.File;
import java.io.IOException;
public class IoTest {
public IoTest(){
}
public void IoTest(){
//下面有几种方法生成文件和目录
//创建一个文件对象
File ff = new File("E:\\测试文件.txt");
//输出详细信息
System.out.println("文件路径 : " + ff.getAbsolutePath());
System.out.println("文件大小 : " + ff.length());
//创建一个文件和创建文件夹
File f = new File("E:\\fff\\hsp.txt");
if(!f.exists()){
//可以创建
try{
f.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
}else{
System.out.println("文件已经存在!!,无需创建!");
}
//判断是否生成文件夹
File fff = new File("E:\\fff");
if(f.isDirectory() && f.exists()){
System.out.println("文件夹已经存在!!");
}else{
//如果不存在则生成文件夹
f.mkdir();
}
//列出文件夹的所有文件
File ffff = new File("E:\\123");
if(ffff.isDirectory()){
File list[] = fff.listFiles();
for(int i = 0; i < list.length; i++){
System.out.println("文件名 : " + list[i].getName());
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IoTest io = new IoTest();
io.IoTest();
}
}
3、读取文件内容
package net.test2;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class IoTest2 {
public IoTest2(){
File f = new File("E:\\Text.txt");
FileInputStream fis = null;
//因为File没有读写能力,所以需要有个InputStream
try{
fis = new FileInputStream(f);
//定义一个字节数组,相当于缓存
byte[] bytes = new byte[1024];
//定义实际读取到的字节数
int n = 1024;
//循环读取
while((fis.read(bytes) != -1)){
String s = new String(bytes, 0, n);
System.out.println(s);
}
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭必须在这里执行,是因为,这里的代码是必须运行的
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IoTest2 io = new IoTest2();
}
}
4、
往文件中写入内容
//FileOutputStream使用
package net.test2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class IoTest3 {
FileOutputStream fos = null;
public IoTest3(){
File f = new File("E:\\ss.txt");
try{
fos = new FileOutputStream(f);
String s = "hello world";
String s1 = "你好";
//定义字节数组
byte[] bytes = new byte[1024];
//如何把String转化成为bytes数组
fos.write(s.getBytes());
fos.write(s.getBytes());
}catch(Exception e){
e.printStackTrace();
}finally{
try{
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IoTest3 io = new IoTest3();
}
}
5、像文件中写入图片
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class IoTest5 {
public void IoTest5()
{
FileInputStream fis=null;
// 输出流
FileOutputStream fos=null;
try {
byte buf[]=new byte[1024];
int n=1024; //记录事迹读取到的字节数
while((fis.read(buf))!=-1)
{
}
} catch (Exception e) {
}finally
{
} catch (IOException e) {
}
}
}
}
6、//演示缓存字符流
public class IoTest6 {
BufferedReader br=null;
BufferedWriter bw=null;
try {
//
} catch (Exception e) {
}
finally{
}
}
}
原文:http://blog.csdn.net/u012965373/article/details/43940137