1 FileInputStream文件输入流
1.1 构造方法与常用方法摘要
🐦 方法摘要:
1.2 文件输入案例
word.txt里存储了若干个单词,请你使用 FileInputStream 读取 word.txt 文件,并将文件内容显示到控制台。
🐱 参考代码及结果:
方式一:一个一个字节的读取
import java.io.FileInputStream; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 * 读取 word.txt案例演示 */ public class FileInputStreamTest1 { public static void main(String[] args){ //1.创建FileInputStream对象 String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\word.txt"; FileInputStream fis = null; try { fis = new FileInputStream(filePath); //2.read方法:读取单个字符,返回该字节码值,如果到达文件末尾,就返回-1 //3.读取文件,并打印在控制台 int readNum = 0; while ((readNum=fis.read()) != -1){ char readChar = (char)readNum; if (readChar == '\n'){ System.out.println(); }else { System.out.print(readChar); } } } catch (IOException e) { e.printStackTrace(); } finally { //4.关闭文件流,释放资源 try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
方式二:按照字节数组读取,提高效率
import java.io.FileInputStream; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 * 读取 word.txt案例演示 */ public class FileInputStreamTest1 { public static void main(String[] args){ //1.创建FileInputStream对象 String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\word.txt"; int readLen = 0; //一次读取8个字节 byte[] buf = new byte[8]; FileInputStream fis = null; try { fis = new FileInputStream(filePath); //2.从输入流读取最多 buf.length 字节的数据到字节数组 //3.读取文件,并打印在控制台 //读取正常,则返回实际读取的字节数,返回-1则读取完毕 while ((readLen=fis.read(buf)) != -1){ String readString = new String(buf, 0, readLen); if ("\n".equals(readString)){ System.out.println(); }else { System.out.print(readString); } } } catch (IOException e) { e.printStackTrace(); } finally { //4.关闭文件流,释放资源 try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
❓ 发现问题:
在案例中,word.txt文件均是英文,如果包含汉字,则可能出现乱码。一般一个汉字按照3字节存储,但是按照字节方式去取值的时候,可能出现截断的情况, 比如,在某一次读取中只读了汉字3个字节中的1个字节,这就导致了乱码的情况。因此,Java提供了字符输入流,敬请期待下一篇博文。
2 FileOutputStream文件输出流
2.1 构造方法与常用方法摘要
方法摘要:
2.2 文件输出案例
使用FileOutputStream向wordtest.txt文件中输入一句话:Hello,world!
🐱 参考代码及结果:
import java.io.FileOutputStream; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class FileOutputStreamTest1 { public static void main(String[] args) { writeFile(); } /** * 演示使用 FileOutputStream 将数据写入文件 * 如果该文件不存在,则创建文件 */ public static void writeFile(){ //创建 FileOutputStream 对象 String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\wordtest.txt"; FileOutputStream fos = null; try { //得到对象 fos = new FileOutputStream(filePath); //写入字符串 String str = "Hello, world!"; fos.write(str.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { try { //释放资源 fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
🦁 说明:
案例中,是使用 new FileOutputStream(filePath) 创建方式,当写入内容时,会覆盖原来的内容;
如果不希望覆盖原来的内容,则应该采用追加的方式,将 append 参数设置为 true,即 new FileOutputStream(filePath,true);
2.3 文件拷贝
经过了对字节输入流与字节输出流的学习,下面尝试一下通过编程 实现对图片的拷贝操作。