Java IO 流、属性操作

本贴最后更新于 847 天前,其中的信息可能已经时移俗易

1.IO 流

根据流向分类:

  • 输入流:把数据从输入设备读取到内存中的流
  • 输出流:把数据从内存中写出到输出设备的流

根据操作数据单位不同分类:

  • 字节流:以字节为单位读写数据的流
  • 字符流:以字符为单位(主要操作文本数据)读写数据的流

在 Java 中描述的底层父类(JavaIO 流共涉及 40 多个类,都是从如下 4 个底层父类派生的,由这 4 个类派生出来的子类名称都是以其父类作为子类名后缀,4 个底层父类都已实现 AutoCloseable 接口):

  • 字节流
    • 字节输入流:InputStream
    • 字节输出流:OutputStream
  • 字符流
    • 字符输入流:Reader
    • 字符输出流:Writer
  • 读取流
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Test4 {
    public static void main(String[] args) throws IOException {
      //循环单个字节读取
      InputStream is = new FileInputStream("D:/aaa/b.txt");
      int len;
      while((len=is.read())!=-1){
          System.out.print((char) len);
      }
      is.close();
      
      //字节数组读取
      InputStream is = new FileInputStream("D:/aaa/b.txt");
      byte[] b = new byte[1024];
      int len;
      while((len=is.read(b))!=-1){
        //在转换时不能全部转换,而是只转换有效字节len(实际读取到的字节个数)
        //System.out.println(new String(b,0,1024));
        System.out.println(new String(b,0,len));
      }
      is.close();
    }
}
  • 写入流
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Test2 {
    public static void main(String[] args) throws IOException {
      OutputStream os = new FileOutputStream("D:/aaa/b.txt");
      byte[] bytes = "hello world".getBytes();
      os.write(bytes);
      //写出一个换行
      os.wirte("\r\n".getBytes());
      os.close();
    }
}

回车符\r 和换行符\n:

  • 回车符\r:回到一行的开头,ASCII 为 13
  • 换行符\n:下一行,ASCII 为 10

系统中的换行:

  • Windows 系统中,每行结尾是 回车+换行,即\r\n
  • Unix 系统中,每行结尾只有 换行,即\n
  • Mac 系统中,每行结尾是 回车,即\r。(从 Mac OS x 开始与 Linux 统一)

通过 System.getProperty("line.separator") 可以获取操作系统的换行符

2.IO 异常的处理

  • JDK7 以前
try{
  //创建流
}catch(Exception e){
  e.printStackTrace()
}finally{
  //关闭流
}
  • JDK7 的处理

JDK7 提供的 try-with-resources 语句,是异常处理的一大利器,该语句确保了每个资源在语句结束时关闭。

try(创建流对象语句){
  //读写数据
}catch(Exception e){
  e.printStackTrace();
}

声明在 try() 中的类必须实现 AutoCloseable 接口,在资源处理完毕时,将自动的调用 AutoCloseable 接口中的 close 方法,如果没有实现 AutoCloseable 接口的类将不能写在 try() 中。

public class Demo{
    public static void main(String[] args){
        try(
            TestAutoCloseable closeable = new TestAutoCloseable();
        ){
            int num = 1/0;
            closeable.test();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
class TestAutoCloseable implements AutoCloseable{
    public void close() throws Exception{
        System.out.println("Close方法被调用");
    }
}

close 方法

3. 属性集

java.util.Properties 继承于 Hashtable,来表示一个持久的属性集。它使用键值对结构存储数据,每个键其对应的值都是一个字符串。

  • public Object setProperty(String key,String value):保存一对属性值
  • public String getProperty(String key):使用此 key 搜索值
  • public Set<String> stringPropertyNames():所有键的名称的集合
  • public void load(InputStream inStream):从字节输入流中读取键值对
  • public vodi store(OutputStream out,@Nullable String comments):将字节输入流写入到一个 Properties 文件中,参数二为一个注释的字符串
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...