一、File类
File类是java.io包下代表与平台无关的目录和文件。File能新建、删除、重命名文件等等,但是不能直接访问文件,需要通过输入输出流对文件进行操作。
(1)访问文件与目录
File类可以通过文件路径字符串来创建File实例,下面程序以几个简单测试File类的功能
package java_test;
import java.io.*;
public class Filetest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//以当前路径创建一个file对象
File file=new File(".");
//直接获取文件名
System.out.println(file.getName());
//获取相对路径的父路径,可能出错
System.out.println(file.getParent());
//获取绝对路径的父路径
System.out.println(file.getAbsoluteFile().getParent());
//在当前路径下创建一个临时文件
File temp=File.createTempFile("aaa",".txt",file);
//指定当虚拟机退出时删除该文件
temp.deleteOnExit();
//使用list方法列举出当前路径下所有文件和路径
String[] list1=file.list();
for(String list:list1) {
System.out.println(list);
}
//创建新文件
File newfile1=new File("d:\\abc.txt");
newfile1.createNewFile();
//使用list方法列举出当前路径下所有文件和路径
File newfile2=new File("d:\\51dpg");
newfile2.createNewFile();
String[] list2=newfile2.list();
for(String list:list2) {
System.out.println(list);
}
//新建一个目录
File newfile3=new File("d:\\test");
newfile3.mkdir();
}
}
(2)文件过滤
File的list方法可以接受一个FilenameFilter参数,只列出符合条件的文件
class MyFilenameFilter implements FilenameFilter / /实现了接口的重写
{
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(".txt");//当文件后缀.txt时返回true
}
}
String[] list3=newfile2.list(new MyFilenameFilter());//实验
for(String list:list3) {
System.out.println(list);
}
二、理解IO流
输入输出都是以内存为主体的,输入流以InputStream(字节流)、Reader(字符流)为基类,输出流以OutputStream、Writer为基类
(1)InputStream和Reader
package java_test;
import java.io.*;
public class InputStreamTest
{
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
File file=new File("d:\\abc.txt");
//设定文件
FileInputStream fis=null;
//创建一个长度为1024的"竹筒"
byte[] b=new byte[1024];
int index=0;
try
{
fis=new FileInputStream(file);
while((index=fis.read(b))>0)
{
System.out.println(new String(b,0,index));
}
}
catch(IOException e)
{
e.getStackTrace();
}
finally
{
if(fis!=null)
{
fis.close();
}
}
}
}
(2)OutputStream和Writer
package java_test;
import java.io.*;
public class OutputStream {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis=null;
FileOutputStream fos=null;
try
{
fis=new FileInputStream("d:\\abc.txt");
fos=new FileOutputStream("d:\\aa.txt");
byte[] b=new byte[1024];
int index=0;
while((index=fis.read(b))>0)
{
fos.write(b,0,index);
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
fis.close();
fos.close();
}
}
}
(3)处理流
处理流可以隐藏底层设备上节点流的差异
下面程序用PrintStream包装了OutputStream
package java_test;
import java.io.*;
public class PrintStreamtest {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
PrintStream ps=null;
try
{
FileOutputStream fos=new FileOutputStream("d:\\aa.txt");
//用printstream包装fileoutputstream类
ps=new PrintStream(fos);
ps.println("机核网");
ps.println("人工智能");
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(ps!=null)
{
ps.close();
}
}
}
}
PrintStream的功能非常强大,对于文本的输出,我们都可以用它来进行包装
(4)转换流
java提供了从字节流转换到字符流的方法
package java_test;
import java.io.*;
public class Bufferedreadertest2 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStreamReader isr=null;
BufferedReader br=null;
try
{
isr=new InputStreamReader(System.in);
br=new BufferedReader(isr);
String s=null;
while((s=br.readLine())!=null)
{
if(s.equals("quit"))
{
System.exit(0);
}
System.out.println(s);
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
br.close();
}
}
}
读取键盘输入:BufferedReader br=new BufferedReader(new InputStreamReader(System.in))