网站免费优化工具,比较有创意的广告,小程序开发一个要多少钱,福建移动网站设计输入输出的重要性#xff1a;
输入和输出功能是Java对程序处理数据能力的提高#xff0c;Java以流的形式处理数据。流是一组有序的数据序列#xff0c;根据操作的类型#xff0c;分为输入流和输出流。
程序从输入流读取数据#xff0c;向输出流写入数据。Java是面向对象…输入输出的重要性
输入和输出功能是Java对程序处理数据能力的提高Java以流的形式处理数据。流是一组有序的数据序列根据操作的类型分为输入流和输出流。
程序从输入流读取数据向输出流写入数据。Java是面向对象的程序语言每一个数据流都是一个对象它们提供了各种支持“读入”与“写入”操作的流类。
Java的输入输出功能来自java.io 包中的InputStream类、OutputStream类、Reader类和Writer类以及继承它们的各种子类。 一解析文件处理的奥秘
1、学习使用文件类 File类
File类用于封装系统的文件和目录的相关信息。在该类中定义了一些与平台无关的方法来操作文件。例如文件的大小、修改时间、文件路径等。
创建 File 对象可以通过下面3种方式
方法1方法2方法3new File(String pathName)File file new File(“E://1.txt”)new File(String parent , String child)parent :父抽象路径名child子路径名字符串2、如何获取文件信息
File 类是对文件和文件夹的抽象包含了对文件和文件夹的多种属性和操作方法。File类的常用方法如下表
返回方法说明StringgetName获取文件名称StringgetParent获取文件的父路径字符串StringgetPath获取文件的相对路径字符串StringgetAbsolutePath获取文件的绝对路径字符串booleanexists判断文件或者文件夹是否存在booleanisFile判断是不是文件类型booleanisDirectory判断是不是文件夹类型booleandelete删除文件或文件夹如果删除成功返回结果为truebooleanmkdir创建文件夹创建成功返回truebooleansetReadOnly设置文件或文件夹的只读属性longlength获取文件的长度longlastModified获取文件的最后修改时间String[ ]list获取文件夹中的文件和子文件夹的名称并存放到字符串数组中下面通过实例介绍File类获取文件信息
package com.zch.io;import java.io.File;
import java.util.Date;/*** 在src根目录下创建FileInfo类在该类的主方法中创建文件对象通过File类的相关方法获取文件的相关信息* */
public class FileInfo {public static void main(String[] args) {String filePath src/com/zch/io/FileInfo.java;// 根据指定路径创建文件对象File file new File(filePath);System.out.println(文件名称: file.getName());System.out.println(文件是否存在 file.exists());System.out.println(文件的相对路径 file.getPath());System.out.println(文件的绝对路径 file.getAbsolutePath());System.out.println(是否为可执行文件 file.canExecute());System.out.println(文件可以读取 file.canRead());System.out.println(文件可以写入 file.canWrite());System.out.println(文件上级路径 file.getParent());System.out.println(文件大小 file.length() B);System.out.println(文件最后修改时间 new Date(file.lastModified()));System.out.println(是否文件类型 file.isFile());System.out.println(是否为文件夹 file.isDirectory());}}运行结果如下
文件名称:FileInfo.java
文件是否存在true
文件的相对路径src\com\zch\io\FileInfo.java
文件的绝对路径D:\Java\IO\src\com\zch\io\FileInfo.java
是否为可执行文件true
文件可以读取true
文件可以写入true
文件上级路径src\com\zch\io
文件大小1195B
文件最后修改时间Sat 03 21:30:10 CST 2022
是否文件类型true
是否为文件夹false在使用delete()方法删除File对象时如果删除的对象是目录该目录中的内容必须为空。 二使用字节输入输出流
字节流用于处理二进制数据的读取和写入它以字节为单位InputStream类和OutputStream类是字节流的抽象类它们定义了数据流读取和写入的基本方法。各个子类会依其特点实现或覆盖这些方法。 1、字节数入流抽象类InputStream
InputStream 类是字节输入流的抽象类定义了操作输入流的各种方法这些方法如表
返回方法说明intavailable()返回当前输入流的数据读取方法可以读取的有效字节数量Abstract intread()从当前数据流中读取一个字节。若已达到流结尾则返回-1intread(byte[ ] bytes)从当前输入流读取一定的byte数据并存取在数组中然后返回读取的byte数据的数量若已到达流结尾则返回-1。voidreset()将当前的输入流重新定位到最后一次调用mark()方法时的位置voidmark(int readlimit)在当前输入流中做标记位置当调用reset()方法时将返回到该位置从标记位置开始到再读入readlimit个字符为止这个标记都维持有效。BooleanmarkSupported()测试当前输入流是否支持mark()和reset()方法只要其中一个不支持则返回falselongskip(long n)跳过和丢弃当前输入的n个字节数据voidclose()关闭当前输入流并释放任何与之相关联的系统资源InputStream 类是抽象类不能通过new关键字来创建该实例对象需要其子类创建该实例对象。下面通过实例如何使用InputStream从控制台获取用户输入的数据信息。
package com.zch.io;import java.io.IOException;
import java.io.InputStream;/*** 创建InputStream实例inp并将其赋值为System类的in属性定义为控制台输入流从inp输入流中获取字节信息* 用这些字节信息创建字符串并将其在控制台上输出。*/
public class InputMessage {public static void main(String[] args) {InputStream inp System.in;byte[] bytes new byte[1024];try {while(inp.read() ! -1){//根据用户输入的信息创建字符串String str new String(bytes).trim();}inp.close(); //关闭流} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}2、字节输出流抽象类OutputStream类
OutputStream定义了输出流的各种方法如下表 和InputStream类一样OutputStream 类是抽象类不能通过new关键字来创建该实例对象需要其子类创建该实例对象。
package com.zch.io;import java.io.IOException;
import java.io.OutputStream;/*** 创建OutputStream实例out,并将其赋值为System.out标准输出流。通过write()方法向流写入数据。*/
public class OutputData {public static void main(String[] args) {OutputStream output System.out; //实例化OutputStream对象byte[] bytes 使用OutputStream输出流在控制台输出字符串\n.getBytes(); //创建bytes数组try {output.write(bytes);bytes 输出内容\n.getBytes();output.write(bytes); //向流中写入数据bytes Java数据交互管道——IO流 \n.getBytes();output.write(bytes);output.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}输出结果如下
使用OutputStream输出流在控制台输出字符串
输出内容Java数据交互管道——IO流 3、文件字节输入流类 FileInputStream类
文件字节输入流可以从指定路径的文件中读取字节数据。文件字节输入流类继承InputStream类并实现了读取输入流的各种方法。
创建文件字节输入流创建的构造方法语法如下
语法1以File对象为参数创建FileInputStream实例
new FileInputStreamFile file语法2以文件对象的绝对路径为参数创建FIleInputStream实例
new FileInputStreamString filepath4、文件字节输出流类FileOutputStream
文件字节输出流关联指定文件路径的文件数据通过文件字节输出流以字节为单位输出并保存到文件中。文件字节输出流继承自OutputStream类并实现OutputStream类的各种方法。
文件字节输出流的构造方法语法如下
语法1以File对象为参数创建FileOutputStream实例
new FileOutputStreamFile file语法2以文件对象的绝对路径为参数创建FIleOutputStream实例
new FileOutputStreamString filepath下面通过实例介绍文件的写入和读取
package com.zch.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** 创建OutputStream实例out,并将其赋值为System.out标准输出流通过write方法向流中写入数据* */
public class FileCreate {public static void main(String[] args) {File file new File(D:/, word.txt); //创建文件对象try {if (!file.exists()) { //如果文件不存在则新建文件file.createNewFile(); }FileOutputStream output new FileOutputStream(file);byte[] bytes Java数据交流管道——IO流.getBytes();output.write(bytes); //将数组的信息写入文件中output.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {FileInputStream input new FileInputStream(file);byte[] bytes2 new byte[1024];int len input.read(bytes2);System.out.println(文件中的信息是 new String(bytes2, 0, len));input.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}三 使用字符输入输出流
字符输入输出流 与 字节输入输出流有相同的功能但传送数据的方式不一样字节流以字节为单位传送数据可以使任何类型的数据例如文本、音频、视频、图片等。字符流以字符为单位传送数据只能传送文本类型的数据。使用字符输入输出流的好处是当读取中文时不会出现乱码问题而使用字节输入输出流时却不能保证这一点。
1、字符输入流抽象类Reader类
该类定义了操作字符输入流的方法如下表
返回方法说明booleanready()判断此数据流是否准备好intread()读入一个字符若已读到流结尾则返回值为-1intread(char[ ])读取一些字符到char[ ]数组内并返回所读入的字符的数量若已到达流结尾则返回-1Abscract intread(char[ ] chars,int off,int len)读取一些字符到char[ ]数组下标从off开始到offlen的位置并返回所读入的字符的数量若已到达流结尾则返回-1voidreset()将当前输入流重新定位到最后一次mark方法时的位置voidmark(int readLimit)将当前输入流中做标记当调用reset方法时将返回到该位置从标记位置开始到再读入readLimit个字符为止这个标记都维持有效booleanmarkSupported测试当前输入流是否支持mark()方法和reset()方法。只要有一个方法不支持则返回-1longskip(long n)跳过参数n指定的字符数量并返回所跳过字符的数量Abstract voidclose()关闭字符输入流并释放与之关联的所有资源
2、字符输出流类Writer类
Writer 类主要是用于解决字符输入流的类其地位与Reader类在输入流的地位和作用是相同的也是所有字符输出流的流类。
Writer类的主要方法如下
返回方法说明voidwrite(char[ ] cbuf)将字符数组的数据写入字符输出流Abstract voidwrite(char[ ] cbuf int off ,int len)将字符数组从下标off 开始向输入流写入长度为len的数据voidwrite(int c )向字符输入流中写入一个字符数据voidwrite(String str )向输入流中写入一个字符串数据voidwrite(String str , int off ,int len)向输入流中写入一个字符串从off 开始长度为len的数据Abstract voidflush()刷新当前输出流并强制写入所有缓冲区的字节数据voidclose()向输出流中写入缓冲区的数据然后关闭当前输出流释放所有与当前输出流相关联的系统资源3、文件字符输入流FileReader
文件字符输入流与文件字节输入流的功能相似但是传送数据的方式不一样字节流以字节为单位传送数据可以使文本、视频、音频、图片等。字符流以字符为单位传送数据只能传送文本类型的数据。
创建字符输入流常用的构造方法
语法1
new FileReaderFile file;语法2
new FileReader(String path);下面通过实例介绍FileReader类读取指定磁盘文件的内容。
package com.zch.io;import java.io.File;
import java.io.FileReader;public class FileInAndOut {public static void main(String[] args) {//定义指定磁盘的文件的File对象File file new File(D://word.txt);if(! file.exists()){System.out.println(对不起不包含指定路径的文件);}else{//根据指定路径的File对象创建FileReader对象try {FileReader fr new FileReader(file);char[] data new char[23]; //定义char数组int length 0;while((length fr.read(data))0){ //循环读取文件中的数据String str new String(data,0,length); //根据读取文件的内容创建String 对象System.out.println(str); //输出读取内容}fr.close(); //关闭流} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}运行结果如下图 4、文件字符输出流FileWriter
文件字符输出流继承自Writer类提供了向文件输出的各种方法数据通过文件字符输出流以字符为单位输出并保存到文件中。
package com.zch.io;
/*** 通过给定的String类型参数的指定文件名称与路径创建FileWriter类。*/
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo {public static void main(String[] args) {File file new File(D://word2.txt); //创建指定文件try {if(! file.exists()){file.createNewFile(); //如果指定文件不存在新建文件}FileReader fr new FileReader(D://word.txt);FileWriter fw new FileWriter(file); //创建FileWriter对象int length 0;while((length fr.read()) ! -1){ //如果没有读到文件末尾fw.write(length); //向文件写入数据}fr.close(); //关闭流fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}运行后创建了Word2.txt 文件并向其中写入数据 四IO流实战
1、Java IO流实现复制文件夹
通过IO不仅可以复制文件还可以复制文件夹但是文件夹内可能包含其他文件夹因此需要对他们进行分别复制。
package com.zch.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class CopyFile {public static void main(String[] args) {File sourceFile null;File desFile null;String sourceFolder D://简历2;String copyFolder D://copy;sourceFile new File(sourceFolder);if (!sourceFile.isDirectory() || !sourceFile.exists()) {System.out.println(源文件夹不存在!);} else {desFile new File(copyFolder);desFile.mkdir();copy(sourceFile.listFiles(), desFile);System.out.println(文件夹复制成功);}}
/*** 创建copy方法该方法接收文件数组和目标文件夹两个参数如果目标文件夹不存在则调用mkdir方法创建文件夹然后再循环中将文件数组* 中的每个文件对象写到目标文件夹内。* param fl* param file*/public static void copy(File[] fl, File file) {if (!file.exists()) { // 如果文件夹不存在file.mkdir(); // 建立新的文件夹}for (int i 0; i fl.length; i) {if (fl[i].isFile()) { // 如果是文件类型则复制文件try {FileInputStream fis new FileInputStream(fl[i]);FileOutputStream out new FileOutputStream(new File(file.getPath() File.separator fl[i].getName()));int count fis.available();byte[] data new byte[count];if ((fis.read(data)) ! -1) {out.write(data);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (fl[i].isDirectory()) { // 如果是文件夹类型File des new File(file.getPath() File.separator fl[i].getName());des.mkdir(); // 在目标文件夹中创建相同的文件夹copy(fl[i].listFiles(), des); // 递归调用方法本身}}}
}运行本实例会将D盘中的简历文件中的内容复制到D盘的copy文件夹中而且包含文件夹的子文件夹 2、Java IO流实现分行向文件中写入数据
FileWriter类可以向文件写入字符数据如果将FileWriter类封装到BufferWriter类的缓冲字符流中能够实现缓冲字符输出流并且可以通过读输出流的newLine()方法来实现数据的分行写入。
package com.zch.io;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 创建BranchWriter类在主方法中定义文件对象将该对象作为参数创建BufferedWriter类实例* 调用该实例的writer方法将数据写入文件中然后 调用newLine()方法写入换行符实现分行向文件写入数据。* */
public class BranchWriter {public static void main(String[] args) {String filePath D://BranchWriter.txt;File file new File(filePath);try {if (!file.exists()) {file.createNewFile();}FileWriter fw new FileWriter(file); // 创建文件输出流BufferedWriter bw new BufferedWriter(fw); // 使用缓冲区数据流封装输出流for (int i 0; i 100; i) { //循环写入100行数据bw.write(Java交互管道——IO流.toCharArray());// 写入数据到输出流bw.newLine(); // 写入换行符bw.flush(); // 刷新缓冲区}System.out.println(成功写入数据);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}3、删除指定文件
File类的delete()方法可以实现删除指定的文件首先使用目标文件路径创建File类的实例对象然后再调用File类的delete()方法。
package com.zch.io;import java.io.File;public class FileDelete {public static void main(String[] args) {String filePath D://word.txt;File file new File(filePath);delFile(file);}public static void delFile(File file) {if (!file.exists()) {System.out.println(文件不存在);return;}boolean rs file.delete();if (rs) {System.out.println(文件删除成功);} else {System.out.println(文件删除失败);}}
}