<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>archive</title><link>https://archive-w.netlify.app/doc/base/IO/</link><description>Recent content on archive</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://archive-w.netlify.app/doc/base/IO/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://archive-w.netlify.app/doc/base/IO/IO/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/base/IO/IO/</guid><description>&lt;h2 id="io-简介">
 IO 简介
 &lt;a class="anchor" href="#io-%e7%ae%80%e4%bb%8b">#&lt;/a>
&lt;/h2>
&lt;p class="tip">IO指以内存为中心，外部到内存为input，内存到外部为output&lt;br>
按方向分为输入流和输出流.按传输单位分为字节流和字符流。按形态分为原始流及缓冲流。&lt;br>
IO流的本质是数据传输，并且流是单向的。&lt;br>&lt;/p>
&lt;h2 id="获取文件的几种方式">
 获取文件的几种方式
 &lt;a class="anchor" href="#%e8%8e%b7%e5%8f%96%e6%96%87%e4%bb%b6%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e5%bc%8f">#&lt;/a>
&lt;/h2>
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="java" data-line="" class="language-java line-numbers" style="max-height: none">&lt;code class="language-java">@Test
public void getFile(){
 // 1，直接获取项目路径下的文件
 File file = new File(&amp;quot;pom.xml&amp;quot;);
 // 2，获取resources里面的文件
 File file1 = new File(&amp;quot;src/main/resources/log4j.properties&amp;quot;);

 // 3，类加载器加载文件方式1,多一个resolveName()方法，用来追加包名。而类加载器直接在加载类的根目录加载。
 URL resource = this.getClass().getResource(&amp;quot;../res/yqgz.cer&amp;quot;);
 // 4，类加载器加载文件方式2
 URL resource1 = this.getClass().getClassLoader().getResource(&amp;quot;_base/io/res/yqgz.cer&amp;quot;);
}
&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 id="字节流">
 字节流
 &lt;a class="anchor" href="#%e5%ad%97%e8%8a%82%e6%b5%81">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;h3 id="inputstream">
 InputStream
 &lt;a class="anchor" href="#inputstream">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>FileInputStream&lt;/p>
&lt;h6 id="fileinputstream读文件到字节代码" class="anchor_hr" style="font-size: 0rem; margin: 0; padding: 0; border-width: 0px;">&lt;/h6>&lt;h6 id="使用try-with-resource方式代码" class="anchor_hr" style="font-size: 0rem; margin: 0; padding: 0; border-width: 0px;">&lt;/h6>&lt;div class="docsify-tabs docsify-tabs--classic">&lt;button anchorId="fileinputstream读文件到字节代码" class="docsify-tabs__tab" data-tab="FileInputStream读文件到字节代码">FileInputStream读文件到字节代码&lt;/button>&lt;div class="docsify-tabs__content" data-tab-content="fileinputstream读文件到字节代码">
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="java" data-line="" class="language-java line-numbers" style="max-height: none">&lt;code class="language-java">@Test
public void demoWithoutTryWithResource(){
 // URL resource = this.getClass().getClassLoader().getResource(&amp;quot;../../yqgz.cer&amp;quot;);
 // File file = new File(resource.toURI());
 URL resource = this.getClass().getResource(&amp;quot;../../res/yqgz.cer&amp;quot;);
 File file = new File(resource.getFile());
 InputStream ins = null;
 ByteArrayOutputStream byteArrayOutputStream;
 try {
 System.out.println(file.isFile() ? file.length() : 0);
 ins = new FileInputStream(file);
 byteArrayOutputStream = new ByteArrayOutputStream();
 byte[] data = new byte[1024];
 int len = 0;
 while((len = ins.read(data)) != -1){
 byteArrayOutputStream.write(data, 0, len);
 }
 System.out.println(byteArrayOutputStream.toByteArray().length);
 } catch (Exception e) {
 e.printStackTrace();
 } finally {
 if(ins != null){
 try {
 ins.close();
 } catch (IOException e) {
 throw new RuntimeException(e);
 }
 }
 // 或者直接关闭，异常包括空指针。省略if空判断。
 // try {
 // ins.close();
 // } catch (Exception e) {
 // throw new RuntimeException(e);
 // }
 }
}
&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>&lt;button anchorId="使用try-with-resource方式代码" class="docsify-tabs__tab" data-tab="使用try-with-resource方式代码">使用try-with-resource方式代码&lt;/button>&lt;div class="docsify-tabs__content" data-tab-content="使用try-with-resource方式代码">
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="java" data-line="" class="language-java line-numbers" style="max-height: none">&lt;code class="language-java">@Test
public void demoWithTryWithResource(){
 URL resource = this.getClass().getResource(&amp;quot;../../res/yqgz.cer&amp;quot;);
 File file = new File(resource.getFile());
 try (InputStream ins = new FileInputStream(file)){
 // file.length() 与后面读取到的字节数一致。都是1583
 System.out.println(file.isFile() ? file.length() : 0);
 byte[] data = new byte[1024 * 2];
 int count = ins.read(data);
 System.out.println(count);
 } catch (Exception e) {
 e.printStackTrace();
 }
} 
&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>&lt;/div>
&lt;/li>
&lt;li>
&lt;p>FilterInputStream&lt;/p></description></item></channel></rss>