Java IO初体验,今天学了java.io的内容,我总结了以下的知识:
1.我们输入指的是 外存文件上的内容 输入到内存中,称为输入input 或者写入read
2.我们输出指的是 将内存中的数据内容写入到外存保存到相应的文件中,称为输出output或者写出write
3.当我们进行输入输出的时候:
主要用到的接口为 InputStream ,OutputStream, Reader, Writer
其中Stream结尾的为字节流 , Reader,Writer为字符流,我们要清楚我们的字节流一次只能读取8为二进制位的字节数据,但是我们的字符流就是一次读取是以字符为单位,也就是说我们的数据可能是两个字节的字符,可能是一个字节的字符,我们都是以字符为单位的输入输出,一次读取一个字符
4.我们的输入输出都有异常的处理,并且在用完流后都要关闭流进行资源释放,跟我们数据库的链接一样,都要进行资源的释放
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class dateTest{
public static void main(String[] args) {
FileInputStream fis =null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("test.txt");
System.out.println(fis.available());
fos =new FileOutputStream("a.txt");
byte[] bytes=new byte[4];
int dateLine=0;
while ((dateLine=fis.read(bytes)) != -1){
String str=new String(bytes,0,dateLine);
System.out.println(str);
fis.skip(2);
fos.write(bytes ,0,dateLine);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
如上图的代码所示:
我们对文件test.txt建立了字节输入流,对文件a.txt建立了字节输出流,然后将test.txt中的内容读取到a.txt文件中
avaliable方法是查找出输入文件中还有多少字节的数据没有读入
skip方法是跳过多少个字节的数据
控制台输出:
test.txt文件内容:
a.txt文件的内容:
重点来了:
我们利用read 和write方法有数组元素未读满时的覆盖的问题:
比如我们定义了一个byte数组长度为4的时候,我们读取abcdef内容,我们第一次读取如下如图所示,
第一次读取:
第二次读取:
我们注意到我们第二次的读取没有读满数组,但是我们第一次读入的数组中后两个元素没有被覆盖掉,所以还是存留在内存数组中,所以我们用read方法要注意返回值是此次读入的字节数量,我们不能用数组的length属性来进行读写,应该用返回值判断读入的字节数量来进行操作,否则可能会有最后一次的数组未读满,但是错误的将上次读后的内容未被覆盖也进行了操作,所以这是我们应该注意的一点。
之后我们的看一些Writer的内容:
import java.io.FileWriter;
import java.io.IOException;
public class fileWriterTest {
public static void main(String[] args) {
FileWriter fileWriter=null;
try {
fileWriter = new FileWriter("test.txt");
//不加true就是在清空源文件后加入新写入的内容
//fileWriter = new FileWriter("test.txt",true);就是在源文件上追加
fileWriter.write('中');
fileWriter.append('爱');
fileWriter.write("中国我爱你");
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileWriter !=null){
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
fileWriter = new FileWriter(“test.txt”),不加true就是在清空源文件后加入新写入的内容
fileWriter = new FileWriter(“test.txt”,true);就是在源文件上追加新的内容
Writer不仅能将字符,字符数组,还能将String的内容的写入,我们都能写入文件当中。因为我们可以将String对象看为字符数组。我们可以这样理解,String string = new String(char[]);对吧!!!!
还有一个重点,我们对于输出流一定要进行flush清空,我们才能看到文件中的有内容,切记!