建网站需不需要服务器,手机网站注册,自己做网站用花钱吗,国外html响应式网站模板下载一#xff0c;初识File类及其常用方法
File类是java.io包下代表与平台无关的文件和目录#xff0c;程序中操作文件和目录#xff0c;都可以通过File类来完成。
通过这个File对象#xff0c;可以进行一系列与文件相关的操作#xff0c;比如判断文件是否存在#xff0c;获…一初识File类及其常用方法
File类是java.io包下代表与平台无关的文件和目录程序中操作文件和目录都可以通过File类来完成。
通过这个File对象可以进行一系列与文件相关的操作比如判断文件是否存在获取文件属性读取文件内容写入文件内容新建删除重命名文件和目录。
这里我们编写代码利用File对象创建一个存在D盘中的文件 import java.io.File;
import java.io.IOException;public class FileSample {public static void main(String[] args) {File f new File(d:/b.txt);//对File对象实例化后指明目录try {boolean r1 f.createNewFile(); //创建新文件 默认返回值是否创建成功并返回true或false//代码可能会抛出异常例如给的地址不存在我们可以增加try—catch块System.out.println(f.getPath() 文件创建是否成功 r1);} catch (IOException e) {e.printStackTrace();}}
}
运行结果显示 然后再显示文件各种属性
import java.io.File;
import java.io.IOException;public class FileSample {public static void main(String[] args) {File f new File(d:/b.txt); //对File对象实例化后指明目录File d new File(d:/电影/华语/);try {boolean r1 f.createNewFile(); //创建新文件 默认返回值是否创建成功并返回true或false//代码可能会抛出异常例如给的地址不存在我们可以增加try—catch块System.out.println(f.getPath() 文件创建是否成功 r1);System.out.println(f.getPath()是否存在f.exists()); //exists判断当前的路径是否存在System.out.println(f.getPath()是否是目录f.isDirectory());//isDirectory判断当前路径是否是目录System.out.println(f.getPath()是否是文件f.isFile()); //isDirectory判断当前路径是否是目录System.out.println(f.getPath()的大小f.length()); //isDirectory判断当前路径是否是目录System.out.println(f.getPath()的文件名f.getName()); //getName得到当前的文件名boolean r2 f.delete(); //删除文件后会返回布尔类型 赋给r2System.out.println(f.getPath()文件是否删除成功r2);System.out.println(f.getPath()是否存在f.exists());boolean r3d.mkdirs(); //创建多级目录创建成功返回布尔型System.out.println([d.getPath()]是否创建成功r3);} catch (IOException e) {e.printStackTrace();}}
}运行结果显示 以上便是通过代码在D盘创建了txt文件如果我们要对此文件夹中的内容进行读取还需要通过学习字节字符流来实现。
二字节字符流的掌握
通过File对象对文件本身的操作比如实现了对于文件的创建文件的删除等等但是对文件的内容作为File对象它是无能为力不能进行操作的我们只能通过字节字符流实现文件读取与写入
1.字节输入流读取二进制文件
首先我们要了解什么是流
Java把传输的数据抽象成流Stream的概念简化了程序处理。按出入的方向可分为输入与输出按内容类型可分为字节流与字符流。
按照以上方式我们还可以得到四种抽象类这四个基本的抽象类覆盖了几乎所有的输入与输出的形式。
字节输入流—InputStream
字节输出流—OutputStream
字符输入流—Reader
字符输出流— Writer (1.)字节输入流 — InputStream
InputStream是所有字节输入流的父类。
InputStream提供核心方法read(),用于读取字节数据。
FileInputStream类专用于读取二进制文件。 InputStream 通用的步骤 实例化InputStream对象利用read方法循环读取的字节数据并进行处理调用close方法关闭InputStream对象 字节输入流读取文件获取test文件字符长度
我们在D盘新建test文档用于后面的读入操作 并在test文档中写入测试内容 然后我们在开发工具中定义了一个文件对象尝试打开一个名为“d/FIFile.text”的文件并读取文件内容。添加try-catch如果文件不存在则捕获并打印异常信息代码如下无论是否成功打开文件在最后都会尝试关闭输入流以释放资源。
package com.project.io;import java.io.*;public class IOsample {public static void main(String[] args) {File source new File(d:/FlFile.text); //定义文件对象InputStream fie null;try {//实例化InputStream对象 读取文件 可能会抛出异常例如文件不存在用try—catch语句包含fie new FileInputStream(source);} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (fie ! null) { //判断当前是否被实例化然后进行关闭流操作try { //try—catch捕获是否关闭成功fie.close();} catch (IOException e) {e.printStackTrace();}}}}
}结构分析
定义文件路径 File source new File(d:/FlFile.text); 定义了一个文件对象代 表位于D盘下的”FIFile.text“文件 尝试实例化输入流 使用try—catch语句块尝试实例化FileInputStream对象来读取文件内容。如果文件不存在会抛出FileNotFoundException异常并在catch块中打印异常堆栈信息。 关闭输入流 在finally块中检查输入流是否被实例化既不为null。如果是则尝试关闭输入流以释放资源。关闭操作也放在了try—catch块中以处理可能在关闭流时发生的IOException异常。 在上述代码中我们已经得到了实例化后的InputStream对象然后在上述代码中添加对文件读取操作分为以下两步
第一步在try-catch块实例化InputStream对象后 接着定义byte数组专用于保存字节信息的数组并给定长度当实例化以后会在内存中创建一个1024字节大小的数组。
第二步定义一个int类型len用于保存本次读取的数组的数据长度 byte[] bs new byte[1024];int len;while((len fie.read(bs)) ! -1){ System.out.println(len);}
在while循环中一次性读取最多1024字节的数据填充到bs数组中把本次读取的长度给len进行赋值len变量不等于-1的话说明还有内容如果等于-1的话代表文件读完然后打印len值查看结果。 可以看到返回值为7正确的返回了上述test测试文档中值的长度。 一.应用字节输出流实现文件复制
字节输出流—OutputStream
OutputStream是所有字节输出流的父类
OutputStream提供核心方法write()用于向指定输出流输出字节数组
FileOutputStream类用于写入二进制文件
OutputStream通用开发模式
实例化OutputStream对象—利用write方法循环写入的字节数据— 调用close方法关闭OutputStream对象
实现文件复制功能
我们希望把原始文件text.jpg进行复制在根目录下生成副本text1.jpg这样的文件复制操作需要我们先读取原始的文件然后再逐渐将目标文件写入
实例化对应的输出流向指定的文件进行写入
定义向目标文件进行输出
File target new File(d:/text1.jpg); //目标文件生成在D盘
实例化OutputStream对象写入要传入的文件
OutputStream fos null;
......完整代码在下面
fos new FileOutputStream(target);//实例化OutputStream对象
利用输出流的write方法 将读取到的目标数组写入到文件
fos.write(bs,0,len);//(原始数据 起始点数组 本次写入长度)将指定的数组向目标文件输出
写入完成以后按照依赖关系先关闭输出流再关闭输入流 finally {if(fos !null){ //判断是否被实例化try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (fie ! null) { //判断当前是否被实例化然后进行关闭流操作try { //try—catch捕获是否关闭成功fie.close();} catch (IOException e) {e.printStackTrace();}}
最后运行返回文档查看结果D盘中成功复制了文件text1.jpg 完整代码
package com.project.io;import java.io.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class IOsample {public static void main(String[] args) {File source new File(d:/text.jpg); //导入Java.io包下的File并将要读取文件的位置写入File target new File(d:/text1.jpg); //目标文件生成在D盘InputStream fie null;OutputStream fos null; //定义字节输出流对象名为fos进行初始化try {// 读取文件 可能会抛出异常例如文件不存在用try—catch语句包含fie new FileInputStream(source);//实例化OutputStream对象fos new FileOutputStream(target);//传入目标要写入的文件byte[] bs new byte[1024];int len;while ((len fie.read(bs)) ! -1) { //一次性读取最多1024字节的数据填充到bs数组中把本次读取的长度给len进行赋值len变量不等于-1的话说明还有内容如果等于-1的话代表文件读完System.out.println(len);fos.write(bs, 0, len);//将指定的数组向目标文件输出(原始数据 起始点数组 本次写入长度)}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos ! null) { //判断是否被实例化try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (fie ! null) { //判断当前是否被实例化然后进行关闭流操作try { //try—catch捕获是否关闭成功fie.close();} catch (IOException e) {e.printStackTrace();}}}}
}二.应用字符输入输出流实现文本读取与写入
Reader字符输入流是所有字符输入流的抽象父类, Writer字符输出流是所有字符输出流的抽象父类。
FileReader与FileWriter分别对应了文本文件的读取与写入。
文件写入操作
1.初始化工作
Writer writer null;2.实例化后并创建文件位置 File file new File(d:/test.txt);3.if语句判断文件是否存在如果不存在则创建然后实例化后写入文件内容。
try {File file new File(d:/test.txt);if (!file.exists()) { //判断当前文件是否存在file.createNewFile(); //如果文件不存在则创建文件 用try—catch捕获提示可能出现的文件创建失败}//要写入内容首先要实例化writer new FileWriter(file);writer.write(这是一个新文件);//写入工作完成} catch (IOException e) {e.printStackTrace();
4.作为字符输出流然后进行关闭
finally {if (writer ! null) { //确保writer已经被实例化try {writer.close(); //调用关闭} catch (IOException e) {//会抛出异常进行捕获e.printStackTrace();}}}
5.在主函数main进行测试调用
public static void main(String[] args){TextFileSample sample new TextFileSample(); //实例化TextFileSample类sample.writeTextFile(); //调用方法}
6.然后我们可以看到在D盘的根目录下成功的产生了创建的文件并完成了写入操作 如果我们想在文件的末尾追加新内容呢?
添加新内容语句
writer.append(:append); //在文件中追加新内容运行结果我们可以看到文件末尾成功添加了内容