IO流基础加强
字节流对象:InputStream,OutputStream
缓冲字节流对象:BufferedInputStream , BufferedOutputStream
用法和字符流对象一样,但也有区别,
输出流用法:
1.创建字节输出流对象,用于操作文件
FileOutputStream fps = new FileOutputStream("1.txt");
fin.available();//读取出要读的文件的大小
2.写数据,直接写入到目的地中
fps.write("ashdgas".getBytes());
3.关闭资源
fps.close();
输入流用法:
//创建字节流输入对象,用于操作文件
FileInputStream fin = new FileInputStream("ArrayListTest.java");
int ch = 0;
byte[] ch1 = new byte[1024];
while((ch = fin.read(ch1)) != -1){
System.out.print(new String(ch1,0,ch));
}
fin.close();
缓冲对象的用法:
public static void main(String[] args) throws IOException {
//创建字符流输入输出对象,关联文件
FileInputStream fin = new FileInputStream("1.mp3");
FileOutputStream fop = new FileOutputStream("2.mp3");
//创建缓冲对象
BufferedInputStream bui = new BufferedInputStream(fin);
BufferedOutputStream bos = new BufferedOutputStream(fop);
byte [] bt = new byte[1024];
int len = 0;
while((len = bui.read(bt)) != -1){
bos.write(bt, 0, len);
bos.flush();
}
bui.close(); //关闭资源
bos.close();
}
接收键盘录入的数据的几种方法:
//第一种
private static void SystemOutDemo() throws IOException {
//获取系统的输入流对象
InputStream in = System.in;
//获取系统的输出流对象
OutputStream os = System.out;
int ch = 0;
while((ch = in.read()) != -1){
os.write((char)ch);
}
}
//第二种
private static void SysteminDemo() throws IOException {
//获取系统的输入流对象
InputStream in = System.in;
int ch = 0;
while((ch = in.read()) != -1){ //输出输入流读取到从键盘上接受的数据
System.out.print((char)ch);
}
}
//第三种
private static void ScannerDemo() {
//Scanner里面封装的就是InputStream对象
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);
}
字节流和字符流的相互转换:使用字符流Reader类的子类InputStreamReader可以将字节流转换为字符流,使用Writer类的子类OutputStreamWriter可以将字符流转换成为字节流。
转换流最大的好处就是可以融入编码操作
当:
- 源或者目的的对应设备是字节流,但操作的是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷
- 一旦操作文本涉及到具体的指定的编码表时必须使用转换流
例如:
//BufferedReader字符流缓冲区,InputStreamReader将字节流转换为字符流//System.in获取系统的字节输入流对象
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter字符流缓冲区,OutputStreamWriter将字符流转换为字节流//System.in获取系统的字节输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String lin=null;
while((lin = br.readLine()) != null){
if(lin.equals("over"))
break;
bw.write(lin.toUpperCase());
//换行
bw.newLine();
//刷新
bw.flush();
}
//使用系统的输入输出流对像,不用执行关流动作
}
流的操作规律:什么时候需要用到哪些对象,需要明确一下几点
- 明确源和目的
源:InputStream Reader
目的: OutputStream Writer
2.明确数据是否是纯文本数据
源:如果是纯文本数据:Reader,不是纯文本数据用InputSteram
目的:如果是纯文本数据:Writer,不是纯文本数据用OutputStream
3.明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:硬盘: file
控制台: System.out
内存:数组
网络:Socket流
- 是否需要其他额外功能。
- 是否需要缓冲区,是的话就用Buffer
- 是否需要使用到转换流
File文件类:
File类可以将文件和文件夹封装成对象
//可以将一个已存在或者不存在的文件封装成一个File对象
File fl = new File("1.txt");
//File.separatorChar用来获取系统平台的路径分隔符
File fl1 = new File("f:"+File.separatorChar+"1.txt");
File类对象的常用方法:
File fl = new File("1.txt");
1.获取
//获取文件名称
String name = fl.getName();
//获取文件绝对路径
String path = fl.getAbsolutePath();
//获取文件相对路径(就是构造器中写的文件的路径)
String path1=fl.getPath();
//获取文件的大小
long len = fl.length();
//获取文件的最后修改时间
long time = fl.lastModified();
. . . . . . ..
2.创建和删除:
File fl = new File("f:/a.txt");
//创建一个文件,当这个文件存在的时候创建失败,返回false
boolean flag = fl.createNewFile();
//删除这个文件
boolean flag1 = fl.delete();
//当虚拟机退出时删掉这个文件
fl.deleteOnExit();
创建删除文件夹:
File fl = new File("abc");
//创建一个文件夹,fl.mkdirs();是创建多级目录
boolean b = fl.mkdir();
System.out.println(b);
//删除一个文件夹,如果里面有内容,就会删除失败
boolean a = fl.delete();
File fl = new File("f:/1.txt");
//判断文件是否存在
boolean b = fl.exists();
//判断是否是文件,应该先判断这个文件是否存在
boolean c = fl.isFile();
//判断是否是目录
boolean d = fl.isDirectory();
4.重命名:
//如果两个文件的目录一样就是将重命名,否则就是将f1剪切到f2并重命名
fl.renameTo(f2);
-------------------------- ----------------------------------------
//获取系统驱动器的根目录,返回File数组
File [] fl = File.listRoots();
Map map = new HashMap<File,String>();
/*for (File file : fl) {
System.out.println(file);
map.put(file,file.get)
}*/
//得到驱动器的总的空间
System.out.println(fl[1].getTotalSpace());
//得到可用空间
System.out.println(fl[1].getFreeSpace());
System.out.println(fl[1].getUsableSpace());
访问目录下的文件和文件夹:
File fl = new File("c:\\");
//获取当前目录下的问价和文件夹的名称,
//调用list方法的File对象中封装的必须是目录,
//否则会发生空指针异常
//如果访问的是系统级保护目录也会发生空指针异常
//如果目录存在,但是没有内容,会返回一个数组,但是长度为零。
String [] name = fl.list();
for (String string : name) {
System.out.println(string);
}
查看目录下是否有指定后缀名的文件:使用文件过滤器
过滤器:public class FilenameFilterDemo1 implements FilenameFilter {
private String filename;
//构造函数,接收一个文件
public FilenameFilterDemo1(String filename) {
super();
this.filename = filename;
}
public boolean accept(File dir, String name) {
//比较文件是否是以指定后缀名结尾
return name.endsWith(filename);
}
}. . . .
File fl = new File("f:\\test\\day13\\");
//传入一个文件过滤器
String [] name = fl.list(new FilenameFilterDemo1(".class"));
for (String string : name) {
System.out.println(string);//输出的是指定后缀名的文件名称
}
IO流基础加强的更多相关文章
- Java 中级IO流基础及主要API编程
1. IO流基础知识,流 是字节从源到目的地的运行的轨迹,次序是有意义的, 字节会按照次序进行传递, 比如Hello World 在下图中的传递的轨迹.该图形象的解释了IO中流的概念.流中全是字节.2 ...
- 乐字节Java之file、IO流基础知识和操作步骤
嗨喽,小乐又来了,今天要给大家送上的技术文章是Java重点知识-IO流. 先来看看IO流的思维导图吧. 一. File 在Java中,Everything is Object!所以在文件中,也不例外! ...
- Java IO流基础总结
前言 好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了.那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下. IO ...
- IO流基础
IO流,也称为数据流,用于处理设备之间的数据传输. JAVA对数据的操作就是通过流的方式,而流分为两种:字符流,字节流 字符流: 可以内部制定码表,处理文字很方便,字符流里的基类是Reader,Wri ...
- IO流-基础
//创建输出流对象 FileWriter fw = new FileWriter("d:\\a.txt"); /* * 创建输出流对象做了哪些事情: * A:调用系统资源创建了一个 ...
- IO流基础,创建File对象与方法是用
1.io流主要用途读取本地文件或服务器文件,进行本地或者服务器开呗工作 构造函数 绝对路径够构造方法: File f = new File("D:\\test\\a.txt&quo ...
- Java之IO流基础流对象
输入流和输出流是相对于内存设备而言 即将外设中的数据读取到内存中就是输入 将内存中的数据写入到外设中就是输出 字符流的由来: 其实就是:字节流读取文字字节数据后,不直接操作而是先查指 ...
- java io 流基础
- Java中的IO流之输入流|乐字节
亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入 ...
随机推荐
- 线程中Join的使用例子
1.实现Runnbale接口, package 网易若干java;//这个例子共有2个线程,一个是主线程,一个是线程t public class MyThread1 implements Runnab ...
- [leetcode]重建二叉树(先序和终须) 中序遍和后续
分割后长度相等,就是参数麻烦,p,先序的起始点, ib,ie 终须的结束和开始. /** * Definition for binary tree * public class TreeNode { ...
- UVA 4728 Squares(凸包+旋转卡壳)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17267 [思路] 凸包+旋转卡壳 求出凸包,用旋转卡壳算出凸包的直 ...
- linux 命令拾遗
man ascii 这个命令会打印出八进制.十六进制和十进制的ASCII码表. xxd xxd可以生成所给与文件的十六进制拷贝,也可以将编辑好的十六进制拷贝还原成二进制格式.它也可以将十六进制拷贝输出 ...
- Android SeekBar 和 draw9patch 的使用
今天要使用一个SeekBar控件,其实我觉得Android默认样式已经很不错了,无奈设计不同意,而且SeekBar左右两边也有图片,默认样式和图片也确实不协调,因此这里使用图片自定义SeekBar样式 ...
- CPSR和SPSR(转)
转载地址:http://blog.chinaunix.net/uid-28458801-id-3487199.html CPSR:程序状态寄存器(current program status regi ...
- 打开U盘里是U盘的快捷方式?(2013.12.05)
昨天去打印室打印,结果U盘就中招了 症状: 我的U盘: 打开变成了里面: ...
- Java程序员25个必备的Eclipse插件
原文:http://www.fromdev.com/2012/01/25-best-free-eclipse-plug-ins-for-java.html "工欲善其事, 必先利器" ...
- 控制反转(IoC)与依赖注入(DI)
前言 最近在学习Spring框架,它的核心就是IoC容器.要掌握Spring框架,就必须要理解控制反转的思想以及依赖注入的实现方式.下面,我们将围绕下面几个问题来探讨控制反转与依赖注入的关系以及在Sp ...
- windows下redis的安装配置和php扩展使用phpredis
1. 首先安装先下载redis数据库 下载地址: http://code.google.com/p/servicestack/wiki/RedisWindowsDownload 目前是2.02 ...