补充知识点
'\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
如有错误,还望指正,谢谢合作。