首页 > 代码库 > 补充知识点

补充知识点

‘\r‘ 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;
‘\n‘ 换行,换到当前位置的下一行,而不会回到行首

Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;

以机器的角度去想不是自己
输入流是用来read的,输出流是用来write的
输入、输出是相对于 JVM 来说的。

从外部读取数据到 JVM 内存中,相对于 JVM 来说就是输入
从 JVM 内存写数据到文件中,或者其他地方,相对于 JVM 来说就是输出

程序在内存中运行,文件在磁盘上,把文件从磁盘上读入内存中来,这就需要输入流。反之,把内存中的数据写到磁盘上的文件就是输出流。


一、问题 
在使用FileInputStream时会遇到如下问题1和问题2。 
问题1:
java.io.FileNotFoundException: .\xxx\xxx.txt (系统找不到指定的路径。) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13) at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)
问题2:
java.io.FileNotFoundException: .\xx\xx.txt (拒绝访问。) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13) at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)

二、分析 
当遇到问题时,的确是当前所指定的文件不存在或者目录不存在。 
当遇到第二个问题时,是因为你访问了一个文件目录,而不是文件,因此会抛出问题2的异常。

三、解决办法 
第一个的解决办法是,先判断一下当前文件是否存在,如果存在则略过,如果不存在,在创建,具体做法如下:

//在填写文件路径时,一定要写上具体的文件名称(xx.txt),否则会出现拒绝访问。File file = new File("./mywork/work.txt");if(!file.exists()){    //先得到文件的上级目录,并创建上级目录,在创建文件    file.getParentFile().mkdir();    try {        //创建文件        file.createNewFile();    } catch (IOException e) {        e.printStackTrace();    }}

第二个的解决办法是,在填写文件的路径时一定要具体到文件,如下:

Filefile = newFile("./mywork/work.txt");

而不能写成:

Filefile = newFile("./mywork/");

四、源码(我的demo)

1、文件输出流

/** * 文件输出流方法 */public void fileOutputStream() {    File file = new File("./mywork/work.txt");    FileOutputStream out = null;    try {        if (!file.exists()) {            // 先得到文件的上级目录,并创建上级目录,在创建文件            file.getParentFile().mkdir();            file.createNewFile();        }        //创建文件输出流        out = new FileOutputStream(file);        //将字符串转化为字节        byte[] byteArr = "FileInputStream Test".getBytes();        out.write(byteArr);        byteArr = null;        out.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}

2、文件输入流方法

/** * 文件输入流 */public void fileInputStream() {    File file = new File("./mywork/work.txt");    FileInputStream in = null;    //如果文件不存在,我们就抛出异常或者不在继续执行    //在实际应用中,尽量少用异常,会增加系统的负担    if (!file.exists())        new FileNotFoundException();        //return;    try {        in = new FileInputStream(file);        byte bytArr[] = new byte[1024];        int len = in.read(bytArr);        System.out.println("Message: " + new String(bytArr, 0, len));        in.close();        bytArr = null;    } catch (IOException e) {        e.printStackTrace();    }}

 

一、问题 
在使用FileInputStream时会遇到如下问题1和问题2。 
问题1:

java.io.FileNotFoundException: .\xxx\xxx.txt (系统找不到指定的路径。)    at java.io.FileOutputStream.open(Native Method)    at java.io.FileOutputStream.<init>(Unknown Source)    at java.io.FileOutputStream.<init>(Unknown Source)    at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13)    at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

问题2:

java.io.FileNotFoundException: .\xx\xx.txt (拒绝访问。)    at java.io.FileOutputStream.open(Native Method)    at java.io.FileOutputStream.<init>(Unknown Source)    at java.io.FileOutputStream.<init>(Unknown Source)    at com.yaohong.test.InputStreamTest.fileInputStream(InputStreamTest.java:13)    at com.yaohong.test.InputStreamTest.main(InputStreamTest.java:27)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、分析 
当遇到问题时,的确是当前所指定的文件不存在或者目录不存在。 
当遇到第二个问题时,是因为你访问了一个文件目录,而不是文件,因此会抛出问题2的异常。

三、解决办法 
第一个的解决办法是,先判断一下当前文件是否存在,如果存在则略过,如果不存在,在创建,具体做法如下:

//在填写文件路径时,一定要写上具体的文件名称(xx.txt),否则会出现拒绝访问。File file = new File("./mywork/work.txt");if(!file.exists()){    //先得到文件的上级目录,并创建上级目录,在创建文件    file.getParentFile().mkdir();    try {        //创建文件        file.createNewFile();    } catch (IOException e) {        e.printStackTrace();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

第二个的解决办法是,在填写文件的路径时一定要具体到文件,如下:

File file = new File("./mywork/work.txt");
  • 1

而不能写成:

    File file = new File("./mywork/");
  • 1

因为这样你访问的是一个目录,因此就拒绝访问。

四、源码(我的demo)

1、文件输出流

/** * 文件输出流方法 */public void fileOutputStream() {    File file = new File("./mywork/work.txt");    FileOutputStream out = null;    try {        if (!file.exists()) {            // 先得到文件的上级目录,并创建上级目录,在创建文件            file.getParentFile().mkdir();            file.createNewFile();        }        //创建文件输出流        out = new FileOutputStream(file);        //将字符串转化为字节        byte[] byteArr = "FileInputStream Test".getBytes();        out.write(byteArr);        byteArr = null;        out.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

2、文件输入流方法

/** * 文件输入流 */public void fileInputStream() {    File file = new File("./mywork/work.txt");    FileInputStream in = null;    //如果文件不存在,我们就抛出异常或者不在继续执行    //在实际应用中,尽量少用异常,会增加系统的负担    if (!file.exists())        new FileNotFoundException();        //return;    try {        in = new FileInputStream(file);        byte bytArr[] = new byte[1024];        int len = in.read(bytArr);        System.out.println("Message: " + new String(bytArr, 0, len));        in.close();        bytArr = null;    } catch (IOException e) {        e.printStackTrace();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

如有错误,还望指正,谢谢合作。

补充知识点