输入输出流
输入流
JAVA中输入输出流有关的类都放在java.io包中,所有与输入流有关的类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类。
InputStream类是字节输入流的抽象类,是所有字节输入流的父类,它是处理单字节的,不可以处理字符。常见方法如下:
read() 从输入流中读取数据的下一个字节,返回一个int值。
read(byte[] b)从输入流中读入一定长度的字节,并以整形参数返回。
Read类,JAVA中的字符大多是unicode双字节编码,故对这些的处理只能通过Read类来实现。
输出流
OutputStream类,是字节输出流的抽象类,常见方法:
write(int b) 将指定的字节写入此输出流
write(byte[] b)将指定的b个字节写入到输出流
Write类,是字符输出流的抽象对象,是所有字符输出流的父类,常见方法:
append(char c) 将指定的字符添加到此writer
write()将字符写入此输出流
File类
File类是java.io中用来操作文件的类,通过调用file类中的方法,可以实现对文件的创建、删除、重命名,并且获得文件的相关属性。
创建一个文件对象
1.File (String pathname) 根据传入的路径名称创建文件对象(包含文件名)
2.File (String parent,String child) 根据传入的父路径和子路径创建文件对象,父路径为loc,子路径为文件名
3.File(File f,String child) 根据传入的父文件对象和子路径名称创建文件对象。
文件的操作
方法 | 返回值 | 说明 |
canRead() | bool | 文件是否可读 |
canWrite() | bool | 文件是否可写 |
createNewFile() | bool | 创建一个新文件 |
delete() | bool | 删除文件 |
exists() | bool | 判断文件是否存在 |
getAbsolutePath() | String | 获取文件绝对路径 |
getName() | String | 获取文件名称 |
getParent() | String | 获取文件的父路径 |
getPath() | String | 获取文件路径名字符串 |
getFreeSpace() | long | 返回路径命中未分配字节数 |
getTotalSpace() | long | 返回抽象路径名指定分区大小 |
length() | long | 返回文件长度 |
isFile() | bool | 判断是不是文件 |
isHidden() | bool | 判断文件是否是隐藏文件 |
LastModified() | long | 获取文件最后修改时间 |
renameTo(File dest) | bool | 重命名文件 |
setLastModified(long time) | bool | 设置文件最后一次修改时间 |
setReadOnly() | bool | 将文件设置为只读 |
例:使用文件File类进行常规操作:
package unit2;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class FileTeat {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file=new File("F:/IE浏览器下载/test.txt");
if(!file.exists()) {
System.out.println("未在指定目录下找到文件名为test的文件!正在创建.........");
try {
file.createNewFile();
}catch(Exception e) {
e.getStackTrace();
}
System.out.println("文件test已经成功创建!");
}
else {
System.out.println("已经找到文件test!");
String number="123456789";
System.out.println("请输入文件的密码:");
Scanner sc=new Scanner(System.in);
String code=sc.next();
if(file.isFile()&&file.canRead()&&number.equals(code)) {
System.out.println("文件可读!正在读取文件中相关信息........");
String filename=file.getName();
String Path=file.getAbsolutePath();
boolean hidden=file.isHidden();
long len=file.length();
long tempTime=file.lastModified();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date=new Date(tempTime);
String time=sdf.format(date);
System.out.println("文件名:"+filename);
System.out.println("文件的绝对路径:"+Path);
System.out.println("文件是否为隐藏文件:"+hidden);
System.out.println("文件的长度:"+len);
System.out.println("文件最后的修改时间:"+time);
file.delete();
System.out.println("文件的使命已经完成,成功删除该文件!");
}
else {
System.out.println("密码错误!不可读!");
}
}
}}
文件夹的操作
文件夹的操作主要有判断文件夹是否存在、创建文件夹、删除文件夹、获取文件夹中的子文件夹和子文件等
常见方法如下:
方法 | 返回值 | 说明 |
isDirectory() | boo | 判断是不是文件夹 |
list() | String[ ] | 返回字符串数组,指明此此抽象路径名称中文件和目录 |
list(FilenameFilter filter) | String[ ] | 返回字符串数组,指明此此抽象路径名称中满足过滤器的文件和目录 |
listFiles() | File[ ] | 返回路径中的文件数组 |
listFiles(FileFilter filter) | File[ ] | 返回满足过滤器的文件和目录的文件数组 |
mkdir() | bool | 创建此抽象路径指定的目录 |
mkdirs() | bool | 创建此抽象路径名指定的目录,包括必须存在的父目录 |
例:文件夹的相关操作实例:
package unit2;
import java.io.File;
public class FolderTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String Path="F:/IE浏览器下载";
for(int i=0;i<10;i++) {
File folder= new File(Path+"\\"+i);
if(!folder.exists()) {
folder.mkdirs();
}
}
System.out.println("文件夹创建完成请进入F:/IE浏览器下载 查看!文件夹列表如下:");
File file=new File("F:\\");
File[] files=file.listFiles();
for(File folder:files) {
if(folder.isFile()) {
System.out.println(folder.getName()+"文件");
}
else if(folder.isDirectory()) {
System.out.println(folder.getName()+"文件夹");
}
}
}}
文件输入输出流
JAVA中读取文件内容使用的是FileInputStream类,写入文件采用的是FileOutputStream类,常见构造方法如下:
FileInputStream(String name) 使用给定的文件名name创建一个FileInputStream对象。
FileInputStream(File file) 使用File对象创建FileInputStream对象,该方法允许把文件连接输入流之前对文件做进一步分析。
FileOutputStream(File file)
例:使用文件输入输出流完成按字节写入读出
package unit2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class FileStreamTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file=new File("word.txt");
try {
FileOutputStream out=new FileOutputStream(file);
String contents="hhu计算机的cx同学很菜";
byte[] con=contents.getBytes();
out.write(con);
out.close();
}catch(Exception e) {
e.getStackTrace();
}
try {
FileInputStream in=new FileInputStream(file);
byte[] bt=new byte[1024];
int len=in.read(bt);
System.out.println("文件中的信息是:"+new String(bt,0,len));
in.close();
}catch(Exception e) {
e.getStackTrace();
}
}}
FileRead类和FileWriter类
与字节输入输出流声明方法一样,不过此处传输是按字符进行写入读出,而并非按字节。
例:采用字节输入输出流完成操作:
package unit2;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;public class ReaderAndWriter {
public static void main(String[] args) {
// TODO Auto-generated method stub
while(true) {
try {
File file=new File("word.txt");
if(!file.exists()) {
file.createNewFile();
}
System.out.println("请输入要执行的事务编号:1.写入文件 2.读出文件");
Scanner sc=new Scanner(System.in);
int choice=sc.nextInt();
switch(choice) {
case 1:
System.out.println("请输入您要写入的内容:");
String tempstr=sc.next();
FileWriter fw=null;
try {
fw=new FileWriter(file,true);
fw.write(tempstr+"\r\n");
}catch(Exception e) {
e.getStackTrace();
}finally {
fw.close();
}
System.out.println("信息已经成功写入!");
break;
case 2:
FileReader fr=null;
if(file.length()==0) {
System.out.println("该文件为空文件!");
}
else {
fr=new FileReader(file);
char[] info=new char[1024];
int hasread=-1;
while((hasread=fr.read(info))!=-1){
System.out.println("文件中的内容是:"+new String(info,0,hasread));
}
}
fr.close();
}
}catch(Exception e) {
e.getStackTrace();
}
}
}}