程序在运行的时候可能需要从外面读入数据,这个时候java.io包提供了大量的流类,所有的输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类。而所有的输入流都是OutputStream(字节输入流)或Writer(字符输入流)的子类。
10.1File类
File类主要用来获取文件本身的一些信息,例如文件所在的目录,文件的长度,或文件的读写权限等,不涉及对文件的读写操作
public static void main(String[] args) {
// TODO Auto-generated method stub
File f=new File("c:/用户/father/桌面","Example10_1.txt"); //创建File对象
System.out.println(f.getName()+"可读吗:"+f.canRead()); //下面的几个方法是File可操作的几个方法,获得File对象的属性
System.out.println(f.getName()+"可写吗:"+f.canWrite());
System.out.println(f.getName()+"的绝对路径是:"+f.getAbsolutePath());
File file=new File("file.txt");
System.out.println(file.getAbsolutePath());
if(!file.exists()){
try{
file.createNewFile();
System.out.println("创建成功!");
}catch(IOException e){
}
}
}
10.1.2目录
①File对象使用public boolean mkdir()方法创建一个目录
②public String []list()方法用字符串的形式返回目录下的全部文件
public File[]listFiles()方法用File对象形式返回目录下的全部文件
上述两种方法调用的接口都是FilenameFile,该接口有一个方法public boolean accept(File dir,String name)
public class FileAccept implements FilenameFilter{
public String extendName;
public void setExtendName(String s){ //设置文件的后缀名
extendName="."+s;
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(extendName); //重写endWith方法
}
}
public class Example10_1_2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File dirFile=new File("E:/");
FileAccept f=new FileAccept();
f.setExtendName("txt");
String []fileName=dirFile.list(f);
for(String name:fileName){
System.out.println(name);
}
}
}
10.1.3运行可执行文件
步骤:使用java.lang包中的Runtime类,创建一个它的对象,然后对象调用exec(String command)方法,例:
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Runtime ec=Runtime.getRuntime(); //当要执行本地的一个可执行文件时,就要使用java.lang包中的Runtime类创建一个对象
// 然后对象调用其中的exec方法
File file =new File("C:/Program Files (x86)/Tencent/QQBrowser","QQBrowser.exe"); //声明要打开的文件
ec.exec(file.getAbsolutePath()); //调用exec()方法打开file对象要打开的路径
}catch(Exception e){
}
}
10.2FilleInputStream输入流读取字节
步骤:①创建FileInputStream对象in
②指定要读取的文件,可以是直接指明,也可以是变量:
(1)FileInputStream in=new FileInputStream(“c:/a.txt”)
(2)File f=new File(“a.txt”);
FileInputStream in=new FileInputStream(f)
③调用对象in的read()方法读取源中的数据
int read() 如果未读出则返回-1
int read(byte b[]) 从源中读出b.length个字节到数组b中
int read(byte b[],int off,int len)从源中读取len个字节到b中,并返回实际读取的字节个数
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=-1;
byte[]a=new byte[100];
try{
File file=new File("E:/test.txt");
InputStream in=new FileInputStream(file);
while((n=in.read(a,0,100))!=-1){
String s=new String(a,0,n);
System.out.println(s);
}
in.close();
}catch(Exception e){
System.out.println(e);
}
}
10_3 OutputStream写入流
步骤跟InputStream一样
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
OutputStream out=new FileOutputStream("E:/tes.txt",true);
byte[]a=("这是OutputStream练习").getBytes();//getBytes()将字符串转换为字符数组
byte[]b=("续写上面的").getBytes();
byte[]c=("第三次实验").getBytes();
out.write(a); ///写入
out.write(b, 0, b.length); //在a后面接着写b数组的全部内容
out.write(c, 2, c.length-2); //在b的后面接着写c的内容,其中2是取c数组的偏移量2,c.length-2是在文件中写入这么长的字节数
out.close();
}catch(Exception e){
System.out.println(e);
}
}