Java-IO操作

设置文件路径;
File file = new File("f:"+File.separator+"ADemo"+File.separator+"my.txt");

创建文件
public boolean createNewFile();

删除文件
public booleandelete();

判断文件是否存在
public booleanexists();

路径分隔符
File.separator;

得到文件父路径
public FilegetParentFile();
【file.getParentFile().exists()】判断文件的父路径是否存在

创建路径
public boolean mkdirs();
【file.getParentFile().mkdirs()】

取得文件大小:
longlength();

判断文件是否是目录
booleanisDirectory();

判断是否是文件
booleanisFile();

输出文件列表


public class Demo {
  public static void main(String[] args) throws Exception {
    Filefile = new File("f:"+File.separator+"元旦");
    print(file);
   }
  public static void print(File file){
  System.out.println(file);
  if(file.isDirectory()){
    Fileresult[] =file.listFiles();
      if(result!=null){
        for(int x =0;x

字符流与字节流

步骤:

1、 通过File类定义一个要操作文件的路径
2、 通过字节流或字符流的子类对象为父类对象实例化
3、 进行数据的读(输入)、写(输出)操作
4、 数据流属于自愿操作,资源操作必须关闭

字节流:Inputstream、OutoutStream
字符流:Reader、Writer

OutputStream子类

FileOutputStream(File file)

创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(File file, boolean append)

创建文件输出流以写入由指定的 File对象表示的文件。 (追加)

方法

void write(byte[] b)

将 b.length字节从指定的字节数组写入此输出流。

void write(byte[] b, int off, int len)

从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。

abstract void write(int b)

将指定的字节写入此输出流。

文件内容的输出


public class CopyDemo {
  public static void main(String[] args) throws Exception {

      //1、定义要输出文件路径

Filefile = new File("f:"+File.separator+"ADemo"+File.separator+"my.txt");

      //2、若文件目录不存在,则进行创建文件目录

 if(!file.getParentFile().exists()){

          file.getParentFile().mkdirs();

      }

      //3、使用OutputStream和其子类进行实例化

OutputStreamoutput = new FileOutputStream(file);

      //4、要进行文件内容的输出

      Stringstr = "好好学习,天天向上!";

 byte[] data = str.getBytes();

      output.write(data);

      //5、关闭资源

      output.close();

   }

}


//4、要进行文件内容的输出

      String str = "好好学习,天天向上!";

 byte[] data = str.getBytes();

 for(intx=0;x

          output.write(data);

      }


//4、要进行文件内容的输出

      String str = "好好学习,天天向上!";

 byte[] data = str.getBytes();

      output.write(data,2,6);

“\r\n”字符串中换行

InpuyStream

abstract int read()

从输入流读取数据的下一个字节。

int read(byte[] b)

从输入流读取一些字节数,并将它们存储到缓冲区 b 。

int read(byte[] b, int off, int len)

从输入流读取最多 len字节的数据到一个字节数组。

数据读取


public class Demo {

 public static void main(String[] args) throws Exception {

      //1、定义要输入文件路径

Filefile = new File("f:"+File.separator+"ADemo"+File.separator+"my.txt");

      //2、若文件存在,执行读取操作

 if(file.exists()){

          //3、使用InputStream进行数据读取

InputStreaminput = new FileInputStream(file);

          //4、进行数据读取

 byte[] data = new byte[1024];

 int len = input.read(data);

          //5、关闭输入流 

          input.close();

System.out.println(new String(data,0,len));

      }

   }

}


//4、进行数据读取

 byte[] data = new byte[1024];

 int foot =0;//数组操作脚标

 int temp =0 ;//每次读取的字节数据

 while((temp=input.read())!=-1){

data[foot++]=(byte)temp;

          }

          //5、关闭输入流 

          input.close();

System.out.println(new String(data,0,foot));

Writer

voidwrite(char[] cbuf)

写入一个字符数组。

abstract voidwrite(char[] cbuf, int off, int len)

写入字符数组的一部分。

void write(intc)

写一个字符

voidwrite(String str)

写一个字符串

voidwrite(String str, int off, int len)

写一个字符串的一部分。


public class Demo {

 public static void main(String[] args) throws Exception {

      //1、定义文件路径

Filefile = new File("f:"+File.separator+"ADemo"+File.separator+"my.txt");

      //2、若文件目录不存在,则称创建

 if(file.getParentFile().exists()){

        file.getParentFile().mkdirs();

      }

      //3、实例Writer的对象

Writerout = new FileWriter(file);

      //4、进行文件内容的输出

      Stringstr = "你好!!!!";

      out.write(str);

      //5、关闭输出流

      out.close();

   }

}

Reader

int read()

读一个字符

int read(char[] cbuf)

将字符读入数组。

abstract int read(char[] cbuf, int off, intlen)

将字符读入数组的一部分。

Int read(CharBuffer target)

尝试将字符读入指定的字符缓冲区。


public class Demo {

 public static void main(String[] args) throws Exception {

      //1、定义文件路径

Filefile = new File("f:"+File.separator+"ADemo"+File.separator+"my.txt");

      //2、若文件存在,继续执行

 if(file.exists()){

          //3、实例Writer的对象

Readerin = new FileReader(file);

          //4、进行文件内容的输出

 char[] data = new char[1024];

 int len = in.read(data);

          //5、关闭输入流

          in.close();

System.out.println(new String(data,0,len));

      }

   }

}

综合案例:文件拷贝

//文件拷贝


public class CopyDemo {

 public static void main(String[] args) throws Exception {

 if(args.length!= 2){//初始化参数不足两位

System.out.println("命令执行错误");

System.exit(1);

      }

FileinFile = new File(args[0]);//源文件路径

 if(!inFile.exists()){//源文件不存在

System.out.println("原文进不存在,请确认执行路径");

System.exit(1);

      }

FileoutFile = new File(args[1]);//目标文件路径

 if(outFile.getParentFile().exists()){

          outFile.getParentFile().mkdirs();

      }

InputStreaminput = new FileInputStream(inFile);

OutputStreamoutput = new FileOutputStream(outFile);

 int len =0;

 while((len=input.read())!=-1){

          output.write(len);

      }

      input.close();

      output.close();

   }

}


//文件拷贝  (改进)

public class CopyDemo {

 public static void main(String[] args) throws Exception {

 if(args.length!= 2){//初始化参数不足两位

System.out.println("命令执行错误");

System.exit(1);

      }

FileinFile = new File(args[0]);//源文件路径

 if(!inFile.exists()){//源文件不存在

System.out.println("原文进不存在,请确认执行路径");

System.exit(1);

      }

FileoutFile = new File(args[1]);//目标文件路径

 if(outFile.getParentFile().exists()){

          outFile.getParentFile().mkdirs();

      }

InputStreaminput = new FileInputStream(inFile);

OutputStreamoutput = new FileOutputStream(outFile);

 byte[] data = new byte[1024];

 int len =0;

 while((len=input.read(data))!=-1){

          output.write(data);

      }

      input.close();

      output.close();

   }

}

内存流

字节内存流:ByteArrayInputStream、ByteArrayOutputStream

字符内存流:CharArrayReader、CharArrayWriter

以文件操作为例:

输出(OutputStream):程序 → OutputStream → 文件

输入(InputStream):程序 ← InputStream ← 文件

以内存操作为例:

输出(OutputStream):程序 ← OutputStream ← 文件

输入(InputStream):程序 → InputStream → 文件

打印流(PrintStream)

构造方法:PrintStream(OutputStream out) 创建一个新的打印流。

      需要接收一个OutprintStream对象

输入:

//输入数据


public class Demo {

 public static void main(String[] args) throws Exception {

InputStreaminput = System.in;

 byte data[]  =new byte[1024];

System.out.print("请输入数据:");

 int len = input.read(data);

System.out.println("输入数据为:"+new String(data,0,len));

   }

}


public class Demo {

 public static void main(String[] args) throws Exception {

InputStreaminput = System.in;

StringBufferbuf = new StringBuffer();

System.out.print("请输入数据:");

 int temp = 0;

 while((temp = input.read())!=-1){

 if(temp == '\n' ){

 break;

          }

buf.append((char)temp);

      }

System.out.println("输入数据为:"+buf);

   }

}

缓冲输入流

字符缓冲区流:BufferedReader、BufferedWirter

字节缓冲区流:BufferedInputStream、BufferedOutputStream

键盘输入的标准格式

//输入数据


public class Demo {

 public static void main(String[] args) throws Exception {

      //System.in是InputStream类的对象

      //BufferedReader 的构造方法里面需要接受Reader类的对象

      //利用InputStreamReader将字节流变为字符流

BufferedReaderbuf =new BufferedReader(new InputStreamReader(System.in));

System.out.print("请输入内容:");

      Stringstr =buf.readLine();

      buf.close();

System.out.println("输入的内容为:"+str);

   }

}

输出文件内容

//输入数据


public class Demo {

 public static void main(String[] args) throws Exception {

Filefile =new File("F:"+File.separator+"Ademo"+File.separator+"my.txt");

BufferedReaderbuf =new BufferedReader(new FileReader(file));

Stringstr=null;

 while((str = buf.readLine())!=null){

System.out.println(str);

      }

      buf.close();

   }

}

扫描流

Scanner

//输入数据


public class Demo {

 public static void main(String[] args) throws Exception {

Scannerscan =new Scanner(System.in);

System.out.print("请输入内容:");

 if(scan.hasNext()){

System.out.println("输入内容:"+scan.nextLine());

      }

      scan.close();

   }

}

//读取文件数据


public class Demo {

 public static void main(String[] args) throws Exception {

Filefile =new File("f:"+File.separator+"Ademo"+File.separator+"my.txt");

Scannerscan =new Scanner(new FileInputStream(file));

 while(scan.hasNext()){

System.out.println(scan.next());

      }

      scan.close();

   }

}

你可能感兴趣的:(Java-IO操作)