/* 2 功能:生成博客目录的JS工具 3 测试:IE8,火狐,google测试通过 6 */ 7 var BlogDirectory = { 8 /* 9 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) 10 */ 11 getElementPosition:function (ele) { 12 var topPosition = 0; 13 var leftPosition = 0; 14 while (ele){ 15 topPosition += ele.offsetTop; 16 leftPosition += ele.offsetLeft; 17 ele = ele.offsetParent; 18 } 19 return {top:topPosition, left:leftPosition}; 20 }, 21 22 /* 23 获取滚动条当前位置 24 */ 25 getScrollBarPosition:function () { 26 var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop; 27 return scrollBarPosition; 28 }, 29 30 /* 31 移动滚动条,finalPos 为目的位置,internal 为移动速度 32 */ 33 moveScrollBar:function(finalpos, interval) { 34 35 //若不支持此方法,则退出 36 if(!window.scrollTo) { 37 return false; 38 } 39 40 //窗体滚动时,禁用鼠标滚轮 41 window.onmousewheel = function(){ 42 return false; 43 }; 44 45 //清除计时 46 if (document.body.movement) { 47 clearTimeout(document.body.movement); 48 } 49 50 var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置 51 52 var dist = 0; 53 if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出 54 window.onmousewheel = function(){ 55 return true; 56 } 57 return true; 58 } 59 if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离 60 dist = Math.ceil((finalpos - currentpos)/10); 61 currentpos += dist; 62 } 63 if (currentpos > finalpos) { 64 dist = Math.ceil((currentpos - finalpos)/10); 65 currentpos -= dist; 66 } 67 68 var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置 69 window.scrollTo(0, currentpos);//移动窗口 70 if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出 71 { 72 window.onmousewheel = function(){ 73 return true; 74 } 75 return true; 76 } 77 78 //进行下一步移动 79 var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")"; 80 document.body.movement = setTimeout(repeat, interval); 81 }, 82 83 htmlDecode:function (text){ 84 var temp = document.createElement("div"); 85 temp.innerHTML = text; 86 var output = temp.innerText || temp.textContent; 87 temp = null; 88 return output; 89 }, 90 91 /* 92 创建博客目录, 93 id表示包含博文正文的 div 容器的 id, 94 mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!), 95 interval 表示移动的速度 96 */ 97 createBlogDirectory:function (id, mt, st, interval){ 98 //获取博文正文div容器 99 var elem = document.getElementById(id); 100 if(!elem) return false; 101 //获取div中所有元素结点 102 var nodes = elem.getElementsByTagName("*"); 103 //创建博客目录的div容器 104 var divSideBar = document.createElement('DIV'); 105 divSideBar.className = 'sideBar'; 106 divSideBar.setAttribute('id', 'sideBar'); 107 var divSideBarTab = document.createElement('DIV'); 108 divSideBarTab.setAttribute('id', 'sideBarTab'); 109 divSideBar.appendChild(divSideBarTab); 110 var h2 = document.createElement('H2'); 111 divSideBarTab.appendChild(h2); 112 var txt = document.createTextNode('目录导航'); 113 h2.appendChild(txt); 114 var divSideBarContents = document.createElement('DIV'); 115 divSideBarContents.style.display = 'none'; 116 divSideBarContents.setAttribute('id', 'sideBarContents'); 117 divSideBar.appendChild(divSideBarContents); 118 //创建自定义列表 119 var dlist = document.createElement("dl"); 120 divSideBarContents.appendChild(dlist); 121 var num = 0;//统计找到的mt和st 122 mt = mt.toUpperCase();//转化成大写 123 st = st.toUpperCase();//转化成大写 124 //遍历所有元素结点 125 for(var i=0; i

Java 学习笔记 IO流与File操作

可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件

读文件示例代码

    File file = new File("D:\\test\\t.txt");
    //这里的有两条斜杠,其实实际的路径为D:\test\t.txt,多的那一条斜杠是转义用的
    InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "GBK");
    //利用之前的File对象,创建了一个`FileInputStream`对象,之后作为InputStreamReader的构造方法参数传入
    //第二个参数是编码,一般使用GBK或者是UTF-8
    BufferedReader reader = new BufferedReader(inputStreamReader);
    //把InputStreamReader作为参数构造一个BufferedReader
    String s;
    while((s=reader.readLine())!=null){
        System.out.println(s);//循环,将该文件里面的内容全部打印出来
    }
    

写文件示例代码

与上面的类似,解释就不多写啦

    File file = new File("Q:\\t.txt");
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK");
    BufferedWriter writer = new BufferedWriter(outputStreamWriter);
    writer.write("hello world");
    writer.close();//必须要调用close才能成功地将内容写入文件

文件不存在的话会自动生成该文件,但是如果是带有文件夹的话,就得考虑到文件夹不存在的情况

例如:

    File file = new File("Q:\\test\\t.txt");
    File temp = file.getParentFile();
    if (!temp.exists()) {
        temp.mkdirs();//文件夹不存在,则新建一个文件夹
    }
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK");
    BufferedWriter writer = new BufferedWriter(outputStreamWriter);
    writer.write("hello world");
    writer.close();
    

复制文件

这里使用的是字节流,把t.txt复制到Q盘中的MY文件夹中,并改名

    FileInputStream inputStream = new FileInputStream("Q:\\t.txt");
    FileOutputStream outputStream = new FileOutputStream("Q:\\MY\\t1.txt");
    int c;
    //读到尾部则是返回-1
    while ((c = inputStream.read()) != -1) {
        outputStream.write(c);
    }
    inputStream.close();
    outputStream.close();

PS:这里和之前一样,如果文件夹不存在,就得调用mkdirs方法进行创建文件夹的操作,除了txt文件,其他的文件也是可以这样复制

File类(文件类)

File对象代表磁盘中实际存在的文件和目录

静态属性
File.separator 分隔符 windows操作系统是\,linux操作系统则是/

构造方法

  • File(File parent, String child) 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例
  • File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。

常用方法

  • public String getName() 返回由此抽象路径名表示的文件或目录的名称。
  • public String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null
  • public File getParentFile() 返回此抽象路径名的父路径名的抽象路径名的file对象,如果此路径名没有指定父目录,则返回 null
  • public String getPath() 将此抽象路径名转换为一个路径名字符串
  • public boolean exists() 判断此抽象路径名表示的文件或目录是否存在
  • public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录
  • public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
  • public boolean delete() 删除此抽象路径名表示的文件或目录
  • public boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
  • public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件

IO流笔记

主要的还是两种,字节流字符流

所有的文件在硬盘或在传输时都是以字节的方式进行,包括图片等,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。

字节流

1.InputStream(输入)

  • FileInputStream(主要)
  • ByteArrayInputStream
  • ObjectInputStream
  • PidedinputStream

    2.OuputStream(输出)

  • FileOutputStream(主要)
  • ByteArrayOutputStream
  • ObjectOutputStream
  • PidedOutputStream


字符流

1.Reader(输入)

  • FileReader
  • CharArrayReader
  • PipedReader
  • StringReader

    2.Writer(输出)

  • FileWriter
  • CharArrayWriter
  • PipedWriter
  • StringWriter


缓冲流

上面字节流和字符流一般不会直接使用,实际上,缓冲流是一个装饰类,可以给字符流和字节流添加缓冲这功能。

BufferReader
BufferWriter
其实这两个也是包括在字符流里面的
使用的时候传入一个Writer或者是Reader对象即可

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter());
BufferedReader bufferedReader = new BufferedReader(new FileReader());

异常处理笔记

1. try把reader,writer等对象放在括号内,可以自动关闭输入/输出流,并释放资源(输出流会自动调用close方法)
如果有多个资源,使用分号隔开
ps: jdk1.7+支持
例如:

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(""))){
    ...
}catch(Excetion e){
    ...
}

2. 可以使用|来捕获多个异常

try{
    ...
}catch(NullPointerException | ArrayIndexOutOfBoundsException e){
    //捕获了两个异常
}

使用字节流获取图片

URL url = new URL("http://wx3.sinaimg.cn/large/00689t5lgy1g11hi5nzmtg30m80jghe3.gif");
        URLConnection connection=url.openConnection();//打开链接
        InputStream inputStream = connection.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("e:\\wan\\download.gif")));
        int c;
        byte[] temp = new byte[1024 * 2];//提供个缓冲区
        while ((c = bufferedInputStream.read(temp)) != -1) {
            bufferedOutputStream.write(temp,0,c);//读多少,写多少
        }
        bufferedOutputStream.close();
                inputStream.close();

使用字节流转字符流获取网页内容

基本如上面代码一样,只是输出的时候需要使用bufferwriter输出

ObjectInputStream和ObjectOutStream

序列化和反序列化

序列化:把内存中的序列对象保存在二进制文件中
反序列化:把二进制文件读取,获得原来的文件

需要类实现序列化接口serializable
标识接口里面没有任何的内容
transient关键字 可以让类的某个属性在序列化的过程中不进行写入

List<Book> books = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Book book = new Book("机战风暴"+i,"乱",56);
            books.add(book);
        }
        
        ObjectOutputStream objectOutputStream = null;
        try {
            objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("e:\\out.bin")));
        } catch (IOException e) {
            e.printStackTrace();
        }

        for (Book book : books) {
            objectOutputStream.writeObject(book);
        }
        objectOutputStream.writeObject(null);//写入一个null,防止之后出现EOFException
        objectOutputStream.close();

        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("e:\\out.bin")));
        Object o = null;
        try {
            while ((o = objectInputStream.readObject()) != null) {
                Book book = (Book) o;
                System.out.println(book.toString());
            }
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
posted @ 2019-09-19 15:11  我的人生  阅读(250)  评论(0编辑  收藏  举报