I/O

Posted xszddsz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O相关的知识,希望对你有一定的参考价值。

流是传递数据的通道。有8位流和16位流

8位流:任何文件都可以传输

16位流:只处理文字

1.1 流的操作类(java.io)

      1)File类,它指的不是文件,而是用来描述文件的路径和文件的周边信息(比如文件的大小,时间,权限)。既可以描述文件也可以描述夹子

      2)File file=new File("");

          (1)File(String pathname)-File //输入一个文件路径返回一个File对象

     (2)File(URI uri)-File  //输入网络地址返回一个File对象

        (3)File(File parent,String child)-File//给一个父路径和子路径进行路径组合,返回一个File对象

          (4)File(String parent,String child)-File//同上

          注意: 本地文件访问斜杠    \

                     / 网络访问斜杠

                     路径分为相对路径和绝对路径,使用相对路径移动比较方便。 

          File类的相关方法。

File file=new File("aaa.txt");
        System.out.println(file.getName());//获得文件名字
        file.isFile();//是不是文件路径
        file.isDirectory();//是不是夹子路径
        file.delete();//删除路径下的文件,如果是有内容的夹子就不会删除
        file.deleteOnExit();//程序关闭之前就会删除,如果是非法关闭就不执行
        file.lastModified();//最后修改时间
        file.isHidden();//是不是隐藏文件路径
        file.isAbsolute();//是不是绝对路径
        file.getAbsolutePath();//获得决对路径
        file.getAbsoluteFile();
        file.canExecute();//对象能不能执行
        file.canWrite();//能不能写
        file.canRead();//能不能读

           File类文件和夹子的创建。

 

 /**
         * 文件创建
         */
        File file=new File("aaaaaaa.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {//路径不存在或者没有权限在夹子里创建文件
            e.printStackTrace();
        }
        /**
         * 创建临时文件
         */
        try {
            File file1=File.createTempFile("kaige","xuetang");
        } catch (IOException e) {//名字过短
            e.printStackTrace();
        }
        /**
         * 创建夹子
         */
        File file1=new File("aa");
        //boolean b=file.mkdir();//创建一个夹子
        boolean b=file1.mkdirs();//批量创建夹子
        /**
         * 路径更改,相当于剪切把文件存到另一个路径中
         */
        File f=new File("一个文件de路径");

        f.renameTo(new File("新的路径"));
/**
* 得到系统的根目录
*/
File[] files=File.listRoots();
for (File file : files) {
System.out.println(file.getPath());
}


 

           注意:夹子是没有大小的,夹子算大小,就必须把它里面的文件全部计算一遍。

         list();方法介绍。(列出当前目录下的所有文件和夹子)

    返回字符串

    list():String[]-File //

    list(FileNameFilter filter):String [] -File //过滤器

    返回File对象

    listFiles();File[]-File

    listFiles(FileFiter filter):File[]-File

    listFiles(FilenameFilter filter):File[]-File

    演示代码如下

File file=new File("F://");
        /**
         *
         */
        String[] filenames=file.list();
        for (String filename : filenames) {
            File file1=new File(file,filename);//路径+名字判断文件是不是夹子
            System.out.println(file1.isDirectory());
        }
        File[] files=file.listFiles();//由于直接返回File对象,可以直接判断该文件是不是夹子
        for (File file1 : files) {
            System.out.println(file1.isFile());
        }
        /**
         * 每个文件都会询问,需要返回true,不要返回false;
         */
        String[] files=file.list(new FilenameFilter() {//过滤器
            @Override
            public boolean accept(File dir, String name) {
                File f=new File(dir,name);
                return f.isDirectory();
            }
        });
        for (String s : files) {
            System.out.println(s);
        }

        File[] files1=file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return false;
            }
        });
        File[] files2=file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return false;
            }
        });

 

     

         

 

 


 

 

           

以上是关于I/O的主要内容,如果未能解决你的问题,请参考以下文章

Linux Kernel文件系统写I/O流程代码分析

java代码实现socket接口通讯(堵塞I/O)

测试 I/O 完成端口支持

java I/O流基础(知识+代码示例)

java I/O流基础(知识+代码示例)

I/O多路复用是什么?(I/O multiplexing)