JAVA基础-输入输出流
一,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基础-输入输出流的更多相关文章
- Java基础—输入输出流
流的概念 在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流——输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分为节 ...
- java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java 对象输入输出流
对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息. ObjectInputStream : 对象输入流 ...
- 浅谈Java的输入输出流(转)
Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输 ...
- Java:输入输出流 java.io包的层次结构
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...
- java IO输入输出流中的各种字节流,字符流类
字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...
- java io 输入输出流
数据流分类: 流序列中的数据既可以是未经加工的原始二进制数据, 也可以是经一定编码处理后符合某种格式规定的特定数据. 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字 ...
- 自己动手写java 字节流输入输出流
数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流. "流是磁盘或其它外围设备中存储的数据的源点或终点." ...
随机推荐
- 学习笔记整理之StringBuffer与StringBulider的线程安全与线程不安全
关于线程和线程不安全: 概述 编辑 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就 ...
- 第46章:MongoDB-监控应用状态
① MongoDB监控 1 db.serverStatus() 查看实例运行状态(内存使用.锁.用户连接等信息) 通过比对前后快照进行性能分析 "connections" # 当 ...
- Windows和Office激活汇总
Windows和Office是常用的软件.多数情况下,即使不激活,也会使用一部分功能.今天来看一下很多前辈的工作成果. 1. Windows 7&10 1.1 永久激活 通过key 分享几个常 ...
- HTTP lab01 做一个简单的测试用 web页面
做一个简单的测试用 web页面 1.安装httpd服务 yum install httpd 安装完httpd服务后,系统就自动生成了/var/www/html目录 创建一个 ...
- Exp7 网络欺诈防范
Exp7 网络欺诈防范 20154305 齐帅 一.实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (2)ett ...
- 20155205 郝博雅 Exp9 Web安全基础
20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...
- MySql技术内幕之MySQL入门(1)
目录 MySql技术内幕之MySQL入门(1) 安装 关于注释 执行SQL语句 关于命令大小写 创建数据库 查看表的信息 查看更加详细的信息 查看与给定模式相匹配的列 插入数据 利用insert添加行 ...
- Linux-3.0.8中基于S5PV210的IRQ模块代码追踪和分析
init/main.c: asmlinkage void start_kernel(void) { ...... early_irq_init(); init_IRQ(); ...... } earl ...
- 【repost】javascript callback
在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...
- Activiti工作流数据库表详细介绍
Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...