网站首页 > java教程 正文
输入输出流
内容概括:
存在java.io包中
所有输入流都是抽象类InputStream(字节输入流)和抽象类Reader(字符输入流)的子类。
所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。
File类
不涉及对文件的读写操作,只获取文件信息,如文件所在目录、文件长度、文件读写权限等。
创建一个File对象的构造方法有:
- File(String filename);
- File(String directoryPath, String filename);
- File(File dir , String filename); //dir是一个目录
几个常用方法:
文件属性
- public String getName() //获取文件名
- public boolean canRead() //是否可读
- public boolean exists() //是否存在
- public String getAbsolutePath() //获取文件绝对路径
- public String getParent() //获得父目录
- public boolean isFile() //判断是否是文件
Txt.java
package com.InOut;
import java.io.*;
public class Txt {
public static void main(String[] args) {
File f = new File("E:\\", "hello.txt"); //文件需事先创建
System.out.println(f.getName() + "是可读的吗:" + f.canRead());
System.out.println(f.getName() + "的长度:" + f.length());
System.out.println(f.getName() + "的绝对路径:" + f.getAbsolutePath());
File file = new File("new.txt");
System.out.println("在当前目录下创建新文件" + file.getName());
if (!file.exists()) {
try {
file.createNewFile();
System.out.println("创建成功");
} catch (IOException exp) {
}
}
}
}
hello.txt是可读的吗:true
hello.txt的长度:24
hello.txt的绝对路径:E:\hello.txt
在当前目录下创建新文件new.txt
创建目录
- public boolean mkdir();
列出目录中的文件
- public String[] list(); //
- public File [] listFiles(); //
- public String[] list(FilenameFilter obj) //以字符串形式返回目录下指定类型的所有文件
- public File [] listFiles(FilenameFilter obj) //用File对象形式返回
- FilenameFilter是一个接口,该接口有一个方法:
- public boolean accept(File dir,String name);
Directory.java
package com.InOut;
import java.io.*;
class FileAccept implements FilenameFilter{
private String extendName;
public void setExtendName(String s){
extendName = "."+s;
}
public boolean accept(File dir,String name){ //重写接口中的方法
return name.endsWith(extendName);
}
}
public class Directory {
public static void main(String[] args) {
File dirFile = new File("."); //参数点号表示当前目录
FileAccept fileAccept = new FileAccept();
fileAccept.setExtendName("txt");
String fileName[] = dirFile.list(fileAccept);//以字符串形式返回,参数为接口回调
for(String name:fileName){
System.out.println(name);
}
}
}
new.txt
文件的创建与删除
先创建对象:File file = new File("E:\",mary.txt);
如果没有名为mary.txt的文件,调用public bolean createNewFile();创建
file.delete();删除文件
运行可执行文件
可以用Runtime类,此时将使用静态方法创建对象:
Runtime ec = Runtime.getRuntime();
Exe.java
package com.InOut;
import java.io.*;
//打开记事本和Typora
public class Exe {
public static void main(String[] args) {
try {
Runtime ce = Runtime.getRuntime();
File file = new File("c:/windows", "Notepad.exe");
ce.exec(file.getAbsolutePath());
file = new File("E:\\User\\Soft\\Typora\\Typora.exe");
ce.exec(file.getAbsolutePath());
} catch (Exception e) {
System.out.println(e);
}
}
}
文件字节输入流
四个基本步骤:
- 设定输入流的源
- 创建指向源的输入流
- 让输入流读取源中的数据
- 关闭输入流
如果需求简单,可使用InputStream的子类FileInputStream。
构造方法
FileInputStream(String name);
FileInputStream(File file);
参数name和file指定的文件就称为输入流的源。通常要配合try catch使用
关闭流
close();
InStream.java
package com.InOut;
import java.io.*;
//使用文件字节流读文件的内容
public class InStream {
public static void main(String[] args) {
int n=-1;
byte [] a =new byte[100];
try{
File f = new File("hello.txt");
System.out.println("is file exists:"+f.exists());
InputStream in = new FileInputStream(f);
while((n=in.read(a,0,100))!=-1){
String s = new String(a,0,n);
System.out.println(s);
}
in.close();
}
catch(IOException e){
System.out.println("File read error"+e);
}
}
}
is file exists:true
Hello, this is my world.
你好,这是我的世界。
文件字节输出流
同文件字节输入流类似
文件字符输入、输出流
上面的文件字节输入流、输出流的read write方法不能很好操作Unicode字符,例如汉字可能会出现乱码现象。
FileReader 和 FileWriter分别是Reader 和 Writer的子类。
CharInOut.java
package com.InOut;
import java.io.*;
public class CharInOut {
public static void main(String[] args) {
File sourceFile = new File("hello.txt");
File targetFile = new File("hello_1.txt"); //不必事先创建
char c[] = new char[19];
try{
Writer out = new FileWriter(targetFile,true);
Reader in = new FileReader(sourceFile);
int n = -1;
while((n=in.read(c))!=-1){
out.write(c,0,n);
}
out.flush();
out.close();
}
catch(IOException e){
System.out.println("Error"+e);
}
}
}
缓冲流
如果把文件字符输入流作为BufferedReader流的源,把文件字符输出流作为BufferedWriter流的目的地,则将具有更强的读写能力,例如按行读取等。
核心语句:String strLine = inTwo.readLine();
//inTwo是一个BufferedReader对象,但是参数里是文件输入流的源。
随机流
RandomAccessFile类,既不是InputStream,也不是OutStream的子类。
由RandomAccessFile类创建的流称为随机流,既可作为流的源,也可作为流的目的地。
构造方法
RandomAccessFile(String name, String mod)
RandomAccessFile(File file, String mod) //参数mod为 r 或 rw
方法
seek(long a) 参数a确定读写位置距离文件开头的字节个数
getFilePointer() 获取流的当前读写位置
read Char( )
writeFloat( )
数组流
- 字节数组流
- 字符数组流
数据流
对象流
其他功能
进度条
ProgressMonitorInputStream(Component c, String s, InputStream); //import java.swing.**
文件锁
FileChannel channel = input.getChannel(); //获得信道
FileLock lock = channel.tryLock(); //加锁
lock.release(); //解锁
“做程序员,圈子和学习最重要”因为有有了圈子可以让你少走弯路,扩宽人脉,扩展思路,学习他人的一些经验及学习方法!同时在这分享一下是一直以来整理的Java后端进阶笔记文档和学习资料免费分享给大家!需要资料的朋友私信我扣【06】
猜你喜欢
- 2024-10-30 Java字符输入流详细解析 看不懂才怪 附配图源码 重要的是有案例
- 2024-10-30 Java流与输入、输出流分别什么?(java的输入输出流)
- 2024-10-30 java中输入流的常用操作(java输入输出流可以从哪几个当面进行分类,分别是什么?)
- 2024-10-30 初识java—(四十八)输入/输出(一)
- 2024-10-30 Java数据输入流(java 输入流)
- 2024-10-30 Java 解析用户输入基础知识(java深入解析)
- 2024-10-30 十、Java控制台输入与输出(java程序控制台输入数据)
- 2024-10-30 Java的输入语句总结(java的输入语句怎么写?)
- 2024-10-30 java键盘输入(JAVA键盘输入三个数)
- 2024-10-30 尚学堂java学习笔记:Java输入和输出
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)