Java 文件操作 , 这也是基于Java API 操作来实现的。

文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制。 所谓文件, 是具有符号名而且在逻辑上具有完整意义的信息。 在操作系统中, 文件是以目录的方式进行组织管理, 文件在目录中的位置称为文件的路径。  

File类:

就是文件和目录路径名的抽象表示形式。 其构造方法有:

     public File(String pathName);
public File(String parent,String child);
public File(File parent,String child);

处理文件名:

String getName( );//得到一个文件的名称( 不包括路径)
String getPath( );//得到一个文件的路径名
String getAbsolutePath( );//得到一个文件的绝对路径名
String getParent( );//得到一个文件的上一级目录名
String renameTo(File newName);//将当前文件名更名为给定文件的完整路径
 

属性测试方法:

方法 含义
boolean exists() 测试当前File对象所指示的文件是否存在
boolean canWrite() 测试当前文件是否可写
boolean canRead() 测试当前文件是否可读
boolean isFile() 测试当前文件是否是文件(非目录)
boolean isDirectory() 测试当前文件是否目录

普通文件信息和工具:

方法 含义
long lastModified() 得到文件最近一次修改时间
long length() 得到文件长度(以字节为单位)
boolean delete() 删除当前文件

目录操作:

方法 含义
boolean mkdir() 根据当前对象生成一个由该对象指定的路径

String list() 列出当前目录下的文件

举几个栗子 :

 通过程序创建新文件
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
File file = new File("d:\\woniuxy\\1.txt");
try {
//当文件已经存在时返回false, 创建失败
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

目录遍历与文件信息:

String[] list()
该方法返回一个字符串数组, 这些字符串指定此抽象路径名表示的目录中的子文件和子目录。 如果此抽象路径名不表示一个目录, 那么此方法将返回null;
File[] listFiles()
该方法返回一个抽象路径名数组, 这些路径名表示此抽象路径名所表示目录中文件。 如果此抽象路径名不表示一个目录,那么此方法将返回null;

举个栗子:

递归显示c盘下所有文件夹及其中文件:
public static void main(String[] args) {
File root = new File("c:/");
showAllFiles(root);
}
public static void showAllFiles(File dir) {
File[] fs = dir.listFiles();
for (File file : fs) {
if(file.isDirectory()){
showAllFiles(file);
}else{
System.out.println(file.getPath());
}
}
}

I/O 与流:

“流” 可以看作是一个流动的数据缓冲区, 数据从数据源流向数据目的地。 在Java语言中, 将不同类型的I/O抽象为流。 所谓“流( stream) ” , 可以看作是数据在文件或程序之间的传递 。

流的分类:

1, 按照数据流向分类:

—---->>输入流(InputStream) : 从外部设备(键盘、 鼠标、 文件、 网络等)到计算机的数据流动;
—---->>输出流(OutputStream) : 从计算机到外部设备(屏幕、 打印机、 文件等)的数据流动。

2,按照数据类型可分为:

——>>>字节流: 用于读/写字节类型的数据(包括ASCII表中的字符)。 类可分为InputStream类及其子类及OutputStream类及其子类。
——>>>字符流 : 用于读/写字符( 16位 Unicode 码) 。 包括Reader类及其子类及Writer类及其子类。

我们来看下流的结构:

常用的字节流与区别:

  • DateInputStream

数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本java数据类型。 应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

  • ByteArrayInputStream

ByteArrayInputStream包含一个内部缓冲区, 被称为内存流, 该缓冲区存储从流中读取的字节。 内部计数器跟总read方法要提供的下一个字节。
关闭ByteArrayInputStream无效。 此类中的方法在关闭此流后仍可被调用, 而不会产生任何IOException。

FileInputStream类:

此类是输入流, 字节流, 是InputStream类的子类, 常用的构造方法有:

public FileInputStream(String name) throws FileNotFoundException

String name是一个完整的路径名

public FileInputStream(File file) throws FileNotFoundException

根据File对象创建文件
举个栗子:

 //利用FileInputStream将D盘下OK文本文件读取到程序中:
public static void showAllFiles(File dir) throws IOException {
File infile = new File("D:/ok.txt");
InputStream input = new FileInputStream(infile);
byte[] b = new byte[(int)infile.length()];
//从输入流中获取的有效数据长度
input.read(b);
//转化成字符串类型
System.out.println(new String(b));
}

FileOutputStream类:

此类是输出流、 字节流, 是OutputStream类的子类, 常用的构造方法有:

public FileOutputStream(String name)

String name是完整的路径。

public FileOutputStream(String name,boolean append)

String name是完整的类路径。
举个栗子:

 //输出数据到D盘的fos.txt文件中:
public static void showAllFiles(File dir) throws IOException {
// 创建字节输出流对象
File file = new File("D:\\fos.txt");
FileOutputStream fos = new FileOutputStream(file);
// 写数据
fos.write("hello,IO".getBytes());
// 释放资源
fos.close();
}

字符流类:

FileReader类:

FileReader是InputStreamReader的子类, 是字符流, 输入流。FileReader类创建了一个可以读取文件内容的Reader类, 它的构造函数有:

FileReader(String filePath) filePath是一个文件的完整路径;
FileReader(File fileObj) fileObj是描述该文件的File对象;

  举个栗子:

 //使用FileReader读取文件:
public static void showAllFiles(File dir) throws IOException {
FileReader fr = new FileReader("c://in.txt");
BufferedReader br = new BufferedReader(fr);
String context = "";
while((context = br.readLine()) != null){
System.out.println(context);
}
}

FileWriter类

FileWriter是OutputStreamWriter的子类, 是字符流, 输出流。FileWriter创建一个可以写文件的Writer类。 构造函数:

构造方法 含义
FileWriter(String filePath) filePath 是一个文件的完整路径
FileWriter(String filePath,boolean append) 如果 append 为true ,输出是追加到文件末尾
FileWriter(Filefile fileobj) 是描述该文件的File对象
FileWriter(File  fileojb,boolean append) 是描述该文件的file对象,如果append 为true,输出是附加到文件末尾

举个栗子:

 //使用FileWriter写出文件到磁盘:
public static void showAllFiles(File dir) throws IOException {
String source = "learn how to write to file";
FileWriter f1 = new FileWriter("D:/file1.txt");
f1.write(source);
f1.close();
}

缓存流:

缓存是IO的一种性能优化, 缓存流为IO流增加了内存缓存区, 有了缓存区, 便可以减少系统直接与硬盘交互传输的次数, 增加每次传送的数据量, 借以提高传输效率, 保护硬件。有了缓冲功能, 则会将输出的内容先放置在内存中, 等到有一定数据量的时候, 或是流关闭、 或调用flush()方法时, 才会将相应的内容保存到硬盘或其他目的地中。
缓存流分BufferedInputStream和BufferedOutputStream两类。

BufferedInputStream类

BufferedInputStream类可以对所有的InputStream类进行带缓存区的包装, 以达到性能的优化。 此类提供了两个构造方法:

BufferedInputStream(InputStream in)
此形式的构造方法创建了一个带有32个字节的缓存流;
BufferedInputStream(InputStream in,int size)
此形式的构造方法按指定的大小(字节)来构造缓存流;

举个栗子:

 public class Demo{
public static void main(String[] args)throws IOException{
BufferedInputSteam buffers = null ;
File file = new File ("E:/test.txt");
byte[] buffer = new byte[(int)file.length()];
//创建bufferinpusteam对象
buffers = new BufferedInputSteam(new FileInputStream(file))
int bytesRead = 0;
try{
//从文件中按字节读取内容, 到文件尾部的时候read 方法将返回-1
while ((bytesRead = buffers .read(buffer)) !=-1) {
//将读取的字节转换为字符串对象
String chunk = new String(buffer,0,bytesRead ) ;
 System.out.println(chunk);
}
}catch (Exceptoion e){
e.printStackTrace();
}
} finally{
//关闭bufferinputstream
buffers.close();
}
}
}

BufferedOutputStream类

BufferedOutputStream类可以对所有的OutputStream类进行带缓存区的包装, 以达到性能的优化。 此类提供了两个构造方法:

 BufferedOutputStream(OutputStream out)
此方式创建了一个带有32个字节的缓存流;
BufferedOutputStream(OutputStream out, int size)
此方式按指定的大小(字节)来构造缓存流;

举个栗子:

    //利用BufferedOutputStream输出文件:
public static void showAllFiles(File dir) throws IOException {
FileOutputStream fos = new FileOutputStream("E:/test/2.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("hello Buffered".getBytes());
bos.close();
fos.close();
}

Java 基本文件操作的更多相关文章

  1. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  2. Java api 入门教程 之 JAVA的文件操作

    I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...

  3. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  4. java csv 文件 操作类

    一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...

  5. java中文件操作《一》

    在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.Fi ...

  6. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  7. Java常用文件操作-2

    上篇文章记录了常用的文件操作,这里记录下通过SSH服务器操作Linux服务器的指定路径下的文件. 这里用到了第三方jar包 jsch-0.1.53.jar, jsch-api 1.删除服务器上指定路径 ...

  8. Java常用文件操作-1

    在我们的实际工作中经常会用到的文件操作,再此,将工作中碰到的做一个记录,以便日后查看. 1.复制文件夹到新文件夹下 /** * 复制文件夹下所有文件到指定路径 *@param oldPath *@pa ...

  9. 【java】文件操作java.io.File

    package 文件操作; import java.io.File; import java.io.IOException; public class TestFile { public static ...

  10. Java 8 文件操作(转)

    我们知道在JDK6甚至之前的时候,我们想要读取一个文本文件也是非常麻烦的一件事,而现在他们都变得简单了, 这要归功于NIO2,我们先看看之前的做法: 读取一个文本文件 BufferedReader b ...

随机推荐

  1. 纯css折叠区域-基于checkbox

    Accordion Accordion即可折叠区域,和<details>标签类似,不过更灵活些.折叠区域往常多用JavaScript实现,这里就纯粹用CSS,就想法上也是异途同归. 折叠区 ...

  2. Android之RxJava详解

    文章大纲 一.什么是RxJava二.为什么要用RxJava三.RxJava使用详解四.项目源码下载五.参考文章 一.什么是RxJava   Rx(Reactive Extensions)是一个库,用来 ...

  3. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  4. windows update error 0x8024401c

    Error 0x8024401c 以管理员身份运行-命令提示符 执行以下3条命令 net stop wuauserv reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Po ...

  5. July 03rd. 2018, Week 27th. Tuesday

    I don't know anything with certainty, but seeing the stars makes me dream. 我不知道世间有什么事是确定不变的,但只要一看到星空 ...

  6. 关于项目中ajax 操作 原生项目遇到的问题

    单选框动态赋值 $('input[name=pszt][value='+val+']').attr("checked",true); 置顶的几种方式 window.scrollTo ...

  7. golang高并发的理解

    前言 GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的<2019 软件工程师状态>报告中指出,具有 Go 经验的候选人是迄今为止最具吸引力的.平均每位求职者会收到9 份面试邀 ...

  8. MATLAB程序:用FCM分割脑图像

    MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...

  9. ASP.Net Mvc实现自定义User Identity用户身份识别系统(2)

    上一篇博文中已经实现了如何在页面上使用自定义的属性即上篇博文所示的@this.U,今天将进一步研究用户自定义User Identity; 实现思路: 通过研究微软自带identity的套路,我们可以发 ...

  10. 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...