java中的IO处理和使用,API详细介绍(一)

来源:互联网 发布:java poi 跨行 编辑:程序博客网 时间:2024/06/06 01:54

       写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面。照旧,文章依旧以例子为主,因为讲解内容的java书很多了,我觉的学以致用才是真。代码是写出来的,不是看出来的。

最后欢迎大家提出意见和建议


【案例一】:创建一个新文件:

import java.io.*;class hello{    public static void main(String[] args) {        File f=new File("D:\\hello.txt");        try{            f.createNewFile();        }catch (Exception e) {            e.printStackTrace();        }    }}

【运行结果】:

程序运行之后,在d盘下会有一个名字为hello.txt的文件。
【案例2】:File类的两个常量:
import java.io.*;class hello{    public static void main(String[] args) {        System.out.println(File.separator);        System.out.println(File.pathSeparator);    }}

【运行结果】:

\

;

此处多说几句:有些同学可能认为,我直接在windows下使用\进行分割不行吗?当然是可以的。但是在linux下就不是\了。所以,要想使得我们的代码跨平台,更加健壮,所以,大家都采用这两个常量吧,其实也多写不了几行。呵呵、

现在我们使用File类中的常量改写上面的代码:

import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        try{            f.createNewFile();        }catch (Exception e) {            e.printStackTrace();        }    }}

你看,没有多写多少吧,呵呵。所以建议使用File类中的常量。

删除一个文件:

/** * 删除一个文件 * */import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        if(f.exists()){            f.delete();        }else{            System.out.println("文件不存在");        }             }}

创建一个文件夹

/** * 创建一个文件夹 * */import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator+"hello";        File f=new File(fileName);        f.mkdir();    }}

【运行结果】:

D盘下多了一个hello文件夹


列出文件夹下的全部文件(包括隐藏文件):

/** * 使用list列出指定目录的全部文件 * */import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator;        File f=new File(fileName);        String[] str=f.list();        for (int i = 0; i < str.length; i++) {            System.out.println(str[i]);        }    }

判断指定路径是否为目录:

/** * 使用isDirectory判断一个指定的路径是否为目录 * */import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator;        File f=new File(fileName);        if(f.isDirectory()){            System.out.println("YES");        }else{            System.out.println("NO");        }    }}


搜索指定目录的全部内容

/** * 列出指定目录的全部内容 * */import java.io.*;class hello{    public static void main(String[] args) {        String fileName="D:"+File.separator;        File f=new File(fileName);        print(f);    }    public static void print(File f){        if(f!=null){            if(f.isDirectory()){                File[] fileArray=f.listFiles();                if(fileArray!=null){                    for (int i = 0; i < fileArray.length; i++) {                        //递归调用                        print(fileArray[i]);                    }                }            }            else{                System.out.println(f);            }        }    }}

使用RandomAccessFile写入文件

/** * 使用RandomAccessFile写入文件 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        RandomAccessFile demo=new RandomAccessFile(f,"rw");        demo.writeBytes("asdsad");        demo.writeInt(12);        demo.writeBoolean(true);        demo.writeChar('A');        demo.writeFloat(1.21f);        demo.writeDouble(12.123);        demo.close();      }}
如果你此时打开hellotxt查看的话,会发现那是乱码。


* 字节流   向文件中写入字符串

/** * 字节流 * 向文件中写入字符串 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        OutputStream out =new FileOutputStream(f);        String str="你好";        byte[] b=str.getBytes();        out.write(b);        out.close();    }}

查看hello.txt会看到“你好”

当然也可以一个字节一个字节的写。

/** * 字节流 * 向文件中一个字节一个字节的写入字符串 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        OutputStream out =new FileOutputStream(f);        String str="你好";        byte[] b=str.getBytes();        for (int i = 0; i < b.length; i++) {            out.write(b[i]);        }        out.close();    }}
结果还是“”你好”


向文件中追加内容:

/** * 字节流 * 向文件中追加新内容: * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        OutputStream out =new FileOutputStream(f,true);        String str="Rollen";        //String str="\r\nRollen";  可以换行        byte[] b=str.getBytes();        for (int i = 0; i < b.length; i++) {            out.write(b[i]);        }        out.close();    }}

【运行结果】:

你好Rollen

 

【读取文件内容】
/** * 字节流 * 读文件内容 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        InputStream in=new FileInputStream(f);        byte[] b=new byte[1024];        in.read(b);        in.close();        System.out.println(new String(b));    }}

【运行结果】

你好Rollen

Rollen_

但是这个例子读取出来会有大量的空格,我们可以利用in.read(b);的返回值来设计程序。如下:

/** * 字节流 * 读文件内容 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        InputStream in=new FileInputStream(f);        byte[] b=new byte[1024];        int len=in.read(b);        in.close();        System.out.println("读入长度为:"+len);        System.out.println(new String(b,0,len));    }}

【运行结果】:

读入长度为:18

你好Rollen

Rollen

 

读者观察上面的例子可以看出,我们预先申请了一个指定大小的空间,但是有时候这个空间可能太小,有时候可能太大,我们需要准确的大小,这样节省空间,那么我们可以这样干:

/** * 字节流 * 读文件内容,节省空间 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        InputStream in=new FileInputStream(f);        byte[] b=new byte[(int)f.length()];        in.read(b);        System.out.println("文件长度为:"+f.length());        in.close();        System.out.println(new String(b));    }}

文件长度为:18

你好Rollen

Rollen

将上面的例子改为一个一个读:

/** * 字节流 * 读文件内容,节省空间 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        InputStream in=new FileInputStream(f);        byte[] b=new byte[(int)f.length()];        for (int i = 0; i < b.length; i++) {            b[i]=(byte)in.read();        }        in.close();        System.out.println(new String(b));    }}

输出的结果和上面的一样。

 

细心的读者可能会发现,上面的几个例子都是在知道文件的内容多大,然后才展开的,有时候我们不知道文件有多大,这种情况下,我们需要判断是否独到文件的末尾。

/** * 字节流 *读文件 * */import java.io.*;class hello{    public static void main(String[] args) throws IOException {        String fileName="D:"+File.separator+"hello.txt";        File f=new File(fileName);        InputStream in=new FileInputStream(f);        byte[] b=new byte[1024];        int count =0;        int temp=0;        while((temp=in.read())!=(-1)){            b[count++]=(byte)temp;        }        in.close();        System.out.println(new String(b));    }}

【运行结果】

你好Rollen

Rollen_

提醒一下,当独到文件末尾的时候会返回-1.正常情况下是不会返回-1







原创粉丝点击