一. File类

我们可以通过File类的一个接受字符串类型的构造方法来创建一个File实例

File(String pathname)// 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

有了该实例,我们就可以通过下面的方法在指定路径下下创建和删除文件:

boolean  exists():判断文件或者目录是否存在

boolean createNewFile():创建文件

boolean delete():删除文件

package io.zhangjia.io;

import java.io.File;

import java.io.IOException;

public class File{

public static void main(String[] args) throws IOException {

//                zhangjia文件夹是存在的

File file = new File("E:\\zhangjia\\text.txt");

if(!file.exists()){

//            这里先不处理异常,先抛出

file.createNewFile();//如果E盘的zhangjia文件夹下的text.txt不存在,就创建这个文件

} else {

file.delete();//  如果存在,就删除这个文件

}

}

}

上面的例子中,在E盘下,zhangjia的文件夹是已经存在的,所在可以直接在该路径下判断test.txt是否存在

但是如果zhangjia文件不存在,或者zhangjia文件下还有多级目录,则需要先判断上机目录是否存在,才能去创建和删除test.txt文件

File getParentFile():获取上级目录

boolean  mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。

package io.zhangjia.io;

import java.io.File;

import java.io.IOException;

public class File {

public static void main(String[] args) throws IOException {

File file = new File("E:\\zhangjia\\a\\b\\c\\text.txt");

if(!file.getParentFile().exists()){ //如果上级目录不存在

file.mkdirs(); //则递归创建所有不存在的上级目录

}

if(!file.exists()){

//            这里先不处理异常,先抛出

file.createNewFile();//如果text.txt不存在,就创建这个文件

} else {

file.delete();//  如果存在,就删除这个文件

}

}

}

二.  InputStream:字节输入流

字节输入流的操作步骤:

使用File类确定要操作的文件

使用InputStream的子类FileInputStream进行对象实例化

进行读操作

释放资源

我们可以使用字节输入流来读取本地磁盘的文件内容:

int read() :从此输入流中读取一个数据字节。

int read(byte[] b) : 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 返回读入缓冲区的字节总数,如果已经到达文件末尾而没有更多的数据,则返回 -1。

int read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。返回读入缓冲区的字节总数

接下来,我们在text.txt中存入下面的内容:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

然后读取上面的文件内容:

package io.zhangjia.io;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Arrays;

public class FileInputStream {

public static void main(String[] args) throws IOException {

File file = new File("E:\\zhangjia\\text.txt");

FileInputStream is = new FileInputStream(file);

//        不带参数的read方法,每次只读文件的单个字符

int read = is.read();

System.out.println("read = " + read); //read = 65

read = is.read();

System.out.println("read = " + read); //read = 66

byte[] bytes = new byte[20];

int read2 = is.read(bytes);

System.out.println("read2 = " + read2); //read2 = 20

String s = new String(bytes);//将字节数组转换为字符串

System.out.println("s = " + s); // s = CDEFGHIJKLMNOPQRSTUV

byte[] bytes2 = new byte[20];

int read3 = is.read(bytes2,1,2);

System.out.println(Arrays.toString(bytes2));

//      [0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

is.close();

}

}

上面我们已经说过,read的带一个参数和带两个参数的方法,如果已经到达文件末尾,返回值都是-1,我们便可以利用这个特性来循环遍历文件的所有内容:

package io.zhangjia.io;

import jdk.nashorn.internal.ir.WhileNode;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Arrays;

public class FileInputStream {

public static void main(String[] args) throws IOException {

//        1. 使用File确定要读取的文件

File file = new File("E:\\zhangjia\\text.txt");

//        2.  实例化FileInputStream

FileInputStream is = new FileInputStream(file);

//        3.   开始读

byte[] bytes = new byte[512];//长度任意,但是建议给偶数,防止中文乱码,其实偶数也有可能会中文乱码

StringBuffer sb = new StringBuffer();

int len = -1;

while((len = is.read(bytes)) != -1){

/*

通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的String,新 String 的长度是字符集的函数

bytes - 要解码为字符的 byte

offset - 要解码的第一个 byte 的索引

length - 要解码的 byte 数

*/

String s = new String(bytes,0,len);

/*还可以再加一个参数,String(byte[] bytes, int offset, int length, String charsetName)

通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。比如:

String s = new String(bytes,0,len,"UTF-8");

*/

sb.append(s);

}

System.out.println(sb);

//输出:ABCDEFGHIJKLMNOPQRSTUVWXYZ

is.close();

}

}

二.  OutputStream:字节输出流

字节输入流的操作步骤:

使用File类确定要操作的文件

使用OutputStream的子类FileOutputStream进行对象实例化

进行写操作

释放资源

package io.zhangjia.io;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class FileOutputStream{

public static void main(String[] args) throws IOException {

//        1. 使用File确定要写入的文件

File file = new File("E:\\zhangjia\\text.txt");

//        2.  实例化FileOutputStream

//        FileOutputStream os = new FileOutputStream(file); //替换原文件的所有内容

FileOutputStream os = new FileOutputStream(file,true);//在原文件内容基础上添加内容

//        3.   开始写

String str = "zhangjia";

byte[] bytes = str.getBytes();//将字符串转换为字节数组

//          os.write(bytes); //全部写入

os.write(bytes, 0, 2); //只写入两个,此时原文件变成了:ABC....XYZzh

os.close();

}

}

java字节输出流方法,Java-IO:File和字节输入输出流相关推荐

  1. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  2. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

  3. Java IO (二),常见的输入/输出流

    字节流和字符流 InputStream和Reader InputStream和Reader两个抽象类是所有输入流的基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板.他们的方法是所有输入 ...

  4. java 输入流关闭顺序_Java IO流中先关闭输出流还是先关闭输入流?为什么?

    java中需要手动释放的资源bai常见的有以下两个: 流相du关资zhi源 流相关资源一般遵循: 1)先开后关dao,先开的输入流,再开的输出流,通过读取输入流写入输出流中,那么应该先关输出流,再关输 ...

  5. 《Java核心技术 卷II》笔记——(7)输入/输出流文件流序列化

    Java的输入和输出通过数据流.序列化和文件系统提供: 输入/输出流?字节流与字符流? 按流向分-- 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 标准输入输出,文件的操 ...

  6. Java常用知识点汇总(中级:异常处理,输入输出流)

    目录 异常处理 1.定义 2.常见的异常 3.如何处理 4.异常的分类 5.Throwable 6.自定义异常 输入输出流(I/O) 1.文件对象 2.什么是流 3.字节流 4.关闭流的方式 5.字符 ...

  7. Java的基础方法Java的对象_java基础之 创建对象的几种方式

    有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...

  8. java 隐藏父类方法,java 子类继承父类成员变量的隐藏、实现方法的重写

    成员变量的隐藏和方法的重写 Goods.java public class Goods { public double weight; public void oldSetWeight(double ...

  9. java 的function_Function方法-java

    Java 方法 System.out.println(); println()是一个方法 System是系统类 out是标准输出对象 什么是方法 方法定义 方法调用 void 关键字 通过值传递参数 ...

最新文章

  1. unity3d优化IOS
  2. 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
  3. 【STM32】FreeRTOS 任务切换
  4. Linux实现开机自动运行普通用户脚本
  5. HTML中a标签/超链接标签的下划线怎么去掉
  6. stm32mp1安装linux系统,stm32mp1linux开发环境搭建(cortex a7)
  7. java项目经验行业_行业研究以及如何炫耀您的项目
  8. tab栏圆点按钮_uniapp tabbar上的小圆点
  9. Apple 的 CEO和Google的CEO在星巴克聊什么呢?
  10. jQuery得事件绑定
  11. JAVA 字符串驻留池
  12. SpringBoot(1.5.6.RELEASE)源码解析(三)
  13. android ctrl 左键鼠标左键直接打开xml文件夹,设置Android Studio通过Ctrl+左键查看源码...
  14. esp8266开发入门教程(基于Arduino)——点亮RGB灯
  15. 云服务器 ECS Linux 配置 vsftpd即FTP的搭建和使用
  16. 深刻理解:无人机数据系统应用
  17. 「软件架构」InfoQ 软件架构和设计趋势报告2020年4月
  18. 计算机windows10怎么找word,Win10 word路径在哪?Win10如何修改word路径
  19. ImageNet中英文类别对照
  20. 关于IDEA调试@RunWith(SpringRunner.class)报错问题

热门文章

  1. 简述ip地址的abc类如何划分_面试官问:讲讲IP地址的分配原理
  2. android多个文件夹压缩,android文件或文件夹压缩
  3. HTML5 dataset遍历,H5中data-xxxx属性
  4. Struts2和Spring3 MVC的区别说明
  5. ImageIO 合并图片工具
  6. 基于JAVA+SpringMVC+MYSQL的网上订餐系统
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的保险销售管理系统
  8. MySQL 执行原生sql
  9. C#异常Retry通用类
  10. mysqli_fetch_row,mysqli_fetch_array,mysqli_fetch_assoc区别