一.File类的常用方法
—–File:(java.on.File)
—–构造函数(/或者\)三种构造方法
——- File(“”);//文件路径
File(File f,”“);//(父文件路径的对象,子文件名称)
File(“”,”“);//(父文件的路径名,子文件名)
File f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace");//构造方法一
// f=new File(f,"a.txt");//构造方法二
f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace","a.txt");
System.out.println(f);
常用方法:
getName();//获取文件名字(返回的是String)
getParent();//获取文件的父目录(返回的是String)
isFile();//判断是否是文件(返回的是boolean)
isDirectory();//判断是否是目录(返回的是boolean)
createNewFile();//创建不存在的文件(创建不存在的新文件,若已经存在,返回false)
list();//当前目录下的所有文件名(此处返回的是:a.txt”不包含父目录”)
listFile();//获取当前目录下的所有文件对象(//此处返回的是:F:\Test\a.txt(包含父目录))
mkdir();//创建目录
mkdirs();//创建不存在的目录 父目录
两者的区别在于(mkdirs可以创建父目录不存在的情况,而mkdir创建的时候父目录必须提前存在,否则会出现创建失败)
————————————–
canRead(返回的是boolean)
canWrite(返回的是boolean)
delete//删除文件(返回的是boolean类型)
getAbsolutePath():由相对路径求绝对路径(返回的是绝对路径(返回的是String的形式))
getAbsoluteFile():(返回的是绝对路径(返回的是File的形式))
getParent:(获取父目录,返回的是String)
getParentFile:(获取父目录,返回的是File对象)
File: 和文件有关,但是和数据没关
绝对路径(盘符D:)和相对路径
*exercise
package day15;
import java.io.File;
import java.io.IOException;
public class File_Test {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f=new File("F:/Test");//构造方法一
f=new File(f,"a.txt");//构造方法二
// f=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace","a.txt");
System.out.println(f);
System.out.println(f.isFile());
System.out.println(f.isDirectory());
System.out.println(f.getName());
System.out.println(f.getParent());
System.out.println(f.canRead());
System.out.println(f.canWrite());//boolean
// System.out.println(f.createNewFile());//创建不存在的新文件,若已经存在,返回false
//f=new File("src/day15/day15.txt");
System.out.println(f.getAbsolutePath());//返回的是绝对路径(返回的是String的形式)
System.out.println(f.getAbsoluteFile());//返回的是绝对路径(返回的是File的形式)
f=new File("F:/Test/a.txt");
System.out.println(f.getParentFile());//获取父目录
System.out.println(f.getParent());
// System.out.println(f.delete());返回的是boolean类型
/*f=new File("F:/Test");
String []aString=f.list();//返回的是一个数组
for (String str : aString) {
System.out.println(str);//此处返回的是:a.txt
}
File[] aFile=f.listFiles();//返回一个数组对象
for (File file : aFile) {
System.out.println(file);//此处返回的是:F:\Test\a.txt(包含父目录)
}*/
f = new File("F:/Test/a");
// System.out.println(f.mkdir());//创建文件夹
System.out.println(f.mkdirs());
}
}
练习:(获取指定文件的所有.java文件)
package day15;
import java.io.File;
public class FileIO_Test {
public static void main(String[] args) {
File file=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace");
filename(file);
}
public static void filename(File file){
File[] aFiles=file.listFiles();
for(File a:aFiles)
{
if(a.isFile())
{
if(a.getName().endsWith(".java"))
System.out.println(file);
}
if(a.isDirectory())
{
filename(a);
}
}
}
}
二.IO流
大纲
IO流体系:
I:Input 输入
O:outPut 输出
流:Stream
IO流
分
字节流:通过字节读取和写入(图片 视频 音频 .docx)
基类:
InputStream
OutputStream
实现类
FileInputStream
int read();
返回int:字节 -1:文件末尾
int read(byte[] buf)
int read(byte[] buf,int start,int len)
返回的int:读取的字节个数,-1:文件末尾
FileOutputStream
write(int c)
write(byte[] buf);
write(byte[] buf ,int start, int len)
close();-----》关闭资源
输入,输出:相对于内存
字符流:通过字符读取和写入(纯文本.txt)
1.输入流
字节流三种方法的读取
read():返回的abstract int
read(byte [] b):返回的是int
read(byte [] b,int off,int len):返回的是int
exercise:
/**
* 读取指定文件中的内容
* @param f
* @throws IOException
*/
private static void testRead(File f) throws IOException {
//1.通道流
InputStream in = new FileInputStream(f);
//2.读取
/*int num = in.read();
while(num!=-1){
//如果不等于-1表示没有到文件结束
System.out.print((char)num);
//继续读取下一个
num = in.read();
}*/
byte [] buf = new byte[1028];//缓冲字节数组的好处:读取的速度变快
int num ;
while((num = in.read(buf))!=-1){
System.out.print(new String(buf, 0, num));
}
/*byte [] buf = new byte[10];
int num = in.read(buf,0, buf.length);
while(num!=-1){
System.out.println(new String(buf, 0, num));
num = in.read(buf,0, buf.length);
}*/
//3.资源使用结束,关闭资源
in.close();
}
2.输出流
private static void testWrite(File f) throws IOException {
//1.通道流
OutputStream os = new FileOutputStream(f);
//2.不断写入
/*os.write('a');
os.write('f');*/
/*String str = "你好!";
os.write(str.getBytes());*/
byte [] buf = "你好!欢迎写入数据".getBytes();//string转bytes
os.write(buf, 0, buf.length);
//3.关闭通道
os.close();
}
3.文件的copy(视频音频文本文件)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteTest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file=new File("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace/A.txt");
FileInputStream in=new FileInputStream(file);
FileOutputStream out=new FileOutputStream("F:\\soft\\eclipse-jee-neon-R-win32-x86_64\\workspace/B.txt");
copy(in,out);
in.close();
out.close();
}
public static void copy(FileInputStream f1,FileOutputStream f2) throws IOException
{
byte []a=new byte[1024];
int num;
while((num=f1.read(a))!=-1)
{
f2.write(a);
}
}
三.周末考试练习题
方法一:
package day14_02;
import java.util.Scanner;
public class Second_HomeWork {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("欢迎使用Mimi转换器");
boolean flag=true;
while(flag){
System.out.println("请输入天气状况的第一个英文字母:");
String numabc=sc.next();
if("D".equals(numabc))
{
System.out.println("干燥");
}
else if("M".equals(numabc))
{
System.out.println("潮湿");
}
else if("H".equals(numabc)){System.out.println("炎热");
}
else if("R".equals(numabc)){System.out.println("下雨");
}
else{
System.out.println("输入错误,无法转换");
}
System.out.println("你想继续吗?y/n");
String str=sc.next();
if(str=="n")
{
flag=false;
}
else if(str=="y")
{
return;
}
}
}
}
方法二:使用hashmap
package day14_02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
boolean flag=true;
while(flag)
{
System.out.println("请输入天气状况的第一个字母:");
String aString=sc.next();
jixu(aString);
System.out.println("请输入是否继续(y/n)");
String num=sc.next();
if("y".equals(num))
{
}
else if("n".equals(num))
{
System.out.println("退出系统");
flag=false;
}else{
System.out.println("输入错误:只能输入y/n,程序结束!");
flag=false;
}
}
}
public static void jixu(String str)
{
HashMap<String, String> ahHashMap=new HashMap<>();
ahHashMap.put("H", "炎热");
ahHashMap.put("D", "干燥");
ahHashMap.put("M", "潮湿");
ahHashMap.put("R", "下雨");
Set set=ahHashMap.keySet();
Iterator a=set.iterator();
while(a.hasNext()){
Object key=a.next();
String value=ahHashMap.get(key);
if(str.equals(key))
{
System.out.println(value);
return;
}
}
System.out.println("输入错误,无法转换");
}
}