JAVA中IO流文件文本的操作(字节流InputStream和OutputStream)字节流File读写操作以及图片的复制
字节流
InputStream(读)和OutputStream(写)
其实字节流和字符流很相似,我们掌握其中的规律即可掌握。
任务1:用字节流将数据写入目标文本
import java.io.*;
public class FileStream
{
public static void main(String[] args)throws IOException
{
writeFile();
}
public static void writeFile()throws IOException
{
FileOutputStream fos=new FileOutputStream("fos.txt");
fos.write("abcde".getBytes());//字节流不支持直接写入字符串,所以将字符串变为字符数组
fos.close();//关闭资源
}
}
结果
任务2:将目标文件中的数据读出
import java.io.*;
public class FileStream
{
public static void main(String[] args)throws IOException
{
readFile1();
}
public static void readFile1()throws IOException
{
FileInputStream fis=new FileInputStream("fos.txt");
int ch=0;
while((ch=fis.read())!=-1)//一个一个读
{
System.out.println((char)ch);//ln 换行
}
fis.close();
}
}
结果
任务3:将上述读写数据的方法进行改进
import java.io.*;
public class FileStream
{
public static void main(String[] args)throws IOException
{
readFile2();
}
public static void readFile2()throws IOException
{
FileInputStream fis=new FileInputStream("fos.txt");
byte[] buf=new byte[1024];//创建一个数组
int len=0;
while((len=fis.read(buf))!=-1)//如果不是-1就一直往里面进行装
{
System.out.println(new String(buf,0,len));
}
fis.close();
}
}
结果
available() 的介绍和应用
import java.io.*;
public class FileStream
{
public static void main(String[] args)throws IOException
{
readFile3();
}
public static void readFile3()throws IOException
{
FileInputStream fis=new FileInputStream("fos.txt");
int num=fis.available();
System.out.println(num);
}
}
结果
我们发现了,available () 这个关键字的用法是可以获取文本中内容的字节数。
那我们在变一下 我们在文本中 (原本为abcde )我们现在增加一个回车符号,并且加入g后,看看是多少个字节数。
结果
我们发现了,个数为8,这就说明回车符号占了两个字节。这里就是\n\r
利用字节流进行图片的复制
这里我们讲到了字节流,就不得不学习和了解一下它有别于字符流的区别,就是在图片上可以进行操作和读取。
代码
/*
任务:
进行图片的拷贝
思路:
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3。通过循环读写,完成数据的储存
4.关闭资源
*/
import java.io.*;
public class CopyPicture
{
public static void main(String[] args)
{
FileOutputStream fos=null;
FileInputStream fis=null;
try//自定义 try-catch 也可以直接抛出
{
fos=new FileOutputStream("F:\\CloudMusic\\Copy_picture.jpg");//这个是写,是创建一个文件
fis=new FileInputStream("F:\\WeChat\\chakayanhu.jpg");//注意,这个是读,就是源文件
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("复制文件失败");
}
finally
{
try
{
if(fis!=null)
fis.close();
}
catch (IOException e)
{
throw new RuntimeException("读取文件失败");
}
}
}
}
原图是:
结果
搞定