一,File类:文件的创建和删除

1.File(String pathname):pathname是指路径名称。用法 File file = new File("d:/1.txt ");

2.File(String parent, String child):parent是父路径字符串,child是子路径字符串。用法:File file = new File(" D:/", " letter.txt");

3.File(File f, String child):File file = new file();

如果当前目录里不存在名为word的文件,File类对象可以调用createNewFile()方法创建一个名为word的新文件。

还可以用文件对象的delete()方法删除掉文件。

public class FileTest {
public static void main(String[] args) { File file = new File("weord.txt"); //创建文件对象,在当前目录
if(file.exists()) {
file.delete();
System.out.println("文件已删除");
}else{
try{ //try语句块捕捉可能出现的异常
file.createNewFile(); //在当前目录下创建文件
System.out.println("文件已创建");
}catch(Exception e) {
e.printStackTrace(); //
}
}
}
}

二,获取文件信息:都用特定方法获取文件的各类信息。

getName():获取文件的名称   length():获取文件的长度   getAbsolutePath():获取文件的绝对路径   getParent():获取文件的父路径   lastModified():获取文件最后修改时间

canread():判断是否可读   canwrite():判断是否可写   exits():判断是否存在   isFile():判断是否存在   isDirectory():判断是否是一个目录   isHidden():判断是否是隐藏文件

我们把上面创建和删除的例子稍微改一下:

public class FileTest {
public static void main(String[] args) { File file = new File("word.txt"); //创建文件对象,在当前目录
if(file.exists()) { //获取各类信息
String name = file.getName();
System.out.println("文件名称是:"+ name);
long length = file.length();
System.out.println("文件长度是:"+ length);
boolean hidden = file.isHidden();
System.out.println("文件是隐藏文件吗?"+ hidden);
String path = file.getAbsolutePath();
System.out.println("文件的绝对路径是:"+ path);
boolean read = file.canRead();
System.out.println("文件是否可读?"+ read);
}else{
try{ //try语句块捕捉可能的异常
file.createNewFile(); //创建文件
System.out.println("文件已创建");
}catch(Exception e) {
e.printStackTrace(); //
}
}
}
}

一,文件输入/输出流 :FileInputStream和FileOutputStream类

程序运行期间的大部分数据都在内存中进行操作,当程序结局了或者关闭后,这些数据都会消失。那么能不能把这些数据都永久的保存下来呢?

答案是肯定的:用文件输入/输出流与指定的文件建立连接,把数据永久性的保存到文件里。

FileInputStream和FileOutputStream类都用来操作磁盘文件。前者具有基本的文件写入能力,后者有基本的文件读取能力。

FileInputStream有两种构造方法:

1.FileInputStream(String name):使用给定的文件名name创建一个FileInputStream对象。

2.FileInputStream(File file):这个构造方法允许在把文件连接输入流之前对文件做进一步分析。

FileOutputStream类有前者相同的参数构造方法。注意到是:创建一个FileInputStream对象时,可以指定不存在的文件名,但此文件不能是一个已经被其他程序打开的文件。

注意:FileInputStream类和FileOutputStream类都只提供了对字节或字节数组的读取方法。汉字在文件中占用两个字节,所以读取不好会出现乱码。(所以下面提到的字符流比字节流更为简便)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; public class FileTest {
public static void main(String[] args) { File file = new File("word.txt"); //创建文件对象,在当前目录
try {
FileOutputStream out = new FileOutputStream(file);//创建FileOutputStream类对象
byte buy[] = "我有java课,在每周一的一二节。".getBytes();//创建数组存放字符串的二进制
out.write(buy); //把数组中的信息写入到文件里
out.close(); //把流关闭
}catch(Exception e){
e.printStackTrace();
}
try {
FileInputStream in = new FileInputStream(file);//创建FileIntputStream类对象
byte byt[] = new byte[1024]; //创建数组,定义内存大小
int len = in.read(byt); //获取写入信息的长度
System.out.println("文件中的信息是:"+ new String(byt, 0, len));//把文件中的信息输出
in.close(); //关闭流
}catch(Exception e){
e.printStackTrace();
}
}
}

虽然java在程序结束时自动关闭所有打开的流,但是当使用完流后,显示地(主动的)关闭所有打开的流是个好习惯。

二,FileReader和FileWriter类(字符流)

FileReader和FileWriter类 对应了FileInputStream和FileOutputStream类。FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余内容,直到源的末尾或流被关闭。

三,带缓存的输入/输出流:BufferInputStream和BufferOutputStream

缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip(), mark(), reset()等方法。

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

1.BufferInputStream(InputStream in):创建一个带有32个字节的缓存区。

2.BufferInputStream(InputStream in, int size):按指定的大小创建缓存区。

从构造方法能看出来:BufferInputStream对象位于InputStream类对象之前。 所以字节数据读取文件的过程是:文件 --> InputStream --> BufferInputStream --> 目的地

一个最优的缓存区的大小取决于所在的操作系统,可用的内存空间,机器配置。

使用BufferOutputStream输出信息和OutputStream输出信息完全一样,不过BufferOutputStream有一个flush()方法来把缓存区的信息强制输出完。

1.BufferInputStream(InputStream in):创建一个带有32个字节的缓存区。

2.BufferInputStream(InputStream in, int size):按指定的大小创建缓存区。

2019-03-24         未完,  过两天补。

JAVA基础-输入输出流的更多相关文章

  1. Java基础—输入输出流

    流的概念 在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流——输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分为节 ...

  2. java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  3. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  4. java 对象输入输出流

    对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息.              ObjectInputStream   : 对象输入流            ...

  5. 浅谈Java的输入输出流(转)

    Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输 ...

  6. Java:输入输出流 java.io包的层次结构

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  7. java IO输入输出流中的各种字节流,字符流类

    字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...

  8. java io 输入输出流

    数据流分类: 流序列中的数据既可以是未经加工的原始二进制数据, 也可以是经一定编码处理后符合某种格式规定的特定数据. 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字 ...

  9. 自己动手写java 字节流输入输出流

    数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.   "流是磁盘或其它外围设备中存储的数据的源点或终点." ...

随机推荐

  1. 解决sqlserver还原数据库失败命令

    1.使用Master数据库 2.选择数据库 select * from master.sys.sysprocesses where dbid=db_id('database') 3.查出进程使用kil ...

  2. ----关于JS中迭代的三个“FOR”----

    for each...in 使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行. 一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的index ...

  3. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  4. 解决maven在build时下载文件卡死问题

    1.停止build 2.cd ~/.m2/repository 3.在这个目录下找到你要下载的文件,然后查看是否有个同名文件带一个.lock后缀 4.rm -f   xxxx.lock 5.重新bui ...

  5. How Does Closure Work in Javascript?

    Simply, closure is the scope that it can visite and operate the variables outside of the function wh ...

  6. IO模型的介绍

    Stevens 在文章中的一种IO Model: ****blocking IO    #阻塞 IO   (系统调用不返回结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错才返回) *** ...

  7. 从今天开始慢慢阅读java9源码决心的声明。

    我从很早的时候就好奇java的源码了,因为有使用者就有制作者. 在校期间使用了java两年多的我却不知道java里面的任何东西. 这个寒假前我无意之间看到了java9出现的新闻,网上查询到原来源码就隐 ...

  8. Exp1 PC平台逆向破解----20164325 王晓蕊

    前言:实验中用到的知识 JE:条件转移指令,如果相等则跳转: JNE:条件转移指令(等同于“Jump Not Equal”),如果不相等则跳转: JMP:无条件跳转指令.无条件跳转指令可转到内存中任何 ...

  9. Charles 学习笔记

    之前接触过抓包工具Fiddler,一直在Windows下使用,感觉还是挺好用的.今天接触了Charles才有了了解,首先Charles设计的比较美丽,而且页面布局也是简单易学的,但这两款抓包工具本质的 ...

  10. 传统对象池&AB对象池

    前序: Q:为啥需要对象池? A: 游戏中大量出现或销毁对象时会反复的开堆和放堆,程序与内存之间交互过于频繁导致资源的大量浪费 Q: 对象池实现原理? A: 当子对象池没有物体的时候,它会和普通没加对 ...