内容
输入输出是相对于内存来说的。
- 输入:把数据从硬盘输入到内存中,所以是读取硬盘中的数据到内存
- 输出:把数据从内存输出到硬盘中,所以是把内存中的数据写入硬盘
字节和编码
1 byte有8 bit,字节是数据的最小单位,因为数据在硬盘中以二进制表示,8 bit就是8位二进制数,8位每一位可以用1或0表示,根据排列组合,1和0可以有种组合,每一个组合可以换成对应的整数-127~127,即byte可以输入的整数的范围。再把输入byte的在范围内的整数再换成二进制存入硬盘。从硬盘读取二进制数,通过编码,表示成一个符号。看ACII码表,十进制97是a,对应的二进制的形状就是1100001对应成a。编码就是人为创建的对应关系,1100001对应成a。(粗鲁的理解字节和编码)
- UTF-8三个字节一个中文
- GBK两个个字节一个中文
- 解码 (decode)把电脑能看懂的二进制变成人能看懂的符号。
- 编码 (encode)把人能看懂的符号变成电脑能看懂的二进制。
Java用例
byte b = 97;
/*97的二进制1100001
通过write(b),写入硬盘,硬盘被打入印记1100001
当读取硬盘的时候,为了让人明白1100001,通过编码对应关系,对应为a,此时打开记事本吧就能看到a
*/
复制代码
常用流
FileOutputStream(String(File),Boolean)
//(写入的目的地参数(即路径),是否续写文件) true续写不覆盖,false创建新文件,覆盖原有内容
FileIntputStream(String(File),Boolean)
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class IOTest {
public static void main(String[] args) throws IOException {
FileOutputStream file = new FileOutputStream("D:\\JavaSE\\基础语法\\src\\com\\javaSE\\CommonAPI\\a.txt",false);
String s = "完全不够";
byte[] b = s.getBytes();//把字符串变成字节数组,因为write()方法只能接收字节,
System.out.println(Arrays.toString(b));
file.write(98);
file.write(b);
file.close();//因为流占用的资源较多,所以要close,不关也行,jvm会自动关
}
}
复制代码
换行
换行符号也是字符串,所以需要转换成字节
- Win:\r\n
- Linux:\n
- Mac:\r
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class IOTest {
public static void main(String[] args) throws IOException {
FileOutputStream file = new FileOutputStream("D:\\JavaSE\\基础语法\\src\\com\\javaSE\\CommonAPI\\a.txt",true);
String s = "完全不够";
byte[] b = s.getBytes();//把字符串变成字节数组,因为write()方法只能接收字节,
//System.out.println(Arrays.toString(b));//你会发现3个字节一个中文
file.write(98);
file.write(b);
file.write("\r\n".getBytes());
file.close();
}
}
复制代码