Java的Stream流
yi、控制台输入输出流,
1、读取控制台输入
Java的控制台输入由System.in完成。为了获得一个绑定到控制台的字符流,可以把System.in包装在一个BufferedReader对象中来创建一个字符流,创建BufferedReader的语法如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader对象创建后,可以通过read()方法从字符流中读取一个字符;或者通过readLine()方法从字符流中读取一个字符串。
package cuiyuee;
import java.io.*; public class BRRead { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
char c;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入字符,按下q键退出。");
do{
c = (char)br.read();
System.out.println(c);
}while(c != 'q');
} }
package cuiyuee;
import java.io.*; public class BRReadLine { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str ;
System.out.println("请输入一个字符串,输入'End'自动退出:");
do{
str = br.readLine();
System.out.println(str);
}while(!str.equals("end"));
} }
2、控制台输出
控制台的输出由print()和println()完成,这些方法都由类PrintStream定义,System.out是该类对象的一个引用。
PrintStrea继承了OutputStream类,也可以用write()方法进行向控制台的写操作。但常用print()和println()
package cuiyuee;
import java.io.*; public class writeDemo { public static void main(String[] args) {
// TODO Auto-generated method stub
int b ;
b = 'A';
System.out.write(b);
System.out.write('\n');
} }
二、文件读写流,FileInputStream和FileOutputStream
1、FileInputStream,该流用于从文件读取数据,有多种方法可以用来创建对象。
1.1、可以用字符串类型的文件名来创建一个输入流对象来读取文件。
InputStream f = new FileInputStream("C:/java/hello");
1.2、也可以使用一个文件对象来创建一个输入流对象来读取文件,首先需要用File()方法创建一个文件对象
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
1.3、创建了InputStream对象就可以使用以下方法来读取流或者进行其他的流操作。
序号 | 方法 |
1 |
public void close() throws IOException() 关闭此文件输入流并释放与此流有关的所有系统资源。跑出IOException异常 |
2 | finalize(),清除与这个文件的连接,确保在不再引入文件输入流时调用期close方法。 |
3 | read(int r),从InputStream对象中读取指定字节的数据,返回为整数值。返回为下一字节数据。如果已经到结尾,则返回为-1. |
4 | read(byte[] r),从输入流读取r.length长度的字节,返回读取的字节数,如果是文件结尾则返回-1. |
5 | available(),返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
2、FileOutputStream,该类用来创建一个文件并向文件中写数据
2.1、如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
2.2、也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
package cuiyuee;
import java.io.*; public class FileStreamTest2 { public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
File f = new File("C:/java/hello.txt");
FileOutputStream fop = new FileOutputStream(f);
//构建FileOutputStream对象,文件不存在会自动新建 OutputStreamWriter writer = new OutputStreamWriter(fop,"UTF-8");
//构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows为gbk writer.append("中文输入");
//写入到缓冲区 writer.append("\r\n");
//换行 writer.append("English");
//刷新缓存,写入到文件,如果下面已经没有写入内容了,直接close也可写入 writer.close();
//关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉 fop.close();
//关闭输出流,释放系统资源 FileInputStream fip = new FileInputStream(f);
//构建FileInputStream对象 InputStreamReader reader = new InputStreamReader(fip,"UTF-8");
//构建InputStreamReader对象,编码与写入相同 StringBuffer sb = new StringBuffer();
while(reader.ready()){
sb.append((char) reader.read());
//转成char加到StringBuffer对象中
}
System.out.println(sb.toString());
reader.close();
//关闭读取流 fip.close();
//关闭输入流,释放系统资源 } }
三、还有一些关于文件和IO的类
1、Java File类
Java文件类以抽象的方式代表文件名和目录路径名,该类主要用于文件和目录的创建,文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。
1.1、通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
File(File parent,String child);
1.2、通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
File(String pathname)
1.3、通过parent路径名字符串和child路径名字符串创建一个新File实例。
File(String parent,String child)
1.4、通过将给定的file:URI转换成一个抽象路径名来创建一个新的File实例。
File(URI uri)
1.3、创建File对象成功后,可以使用以下列表中的方法操作文件。
public String getName():返回由此抽象路径名表示的文件或目录的名称。
public String getParent():返回此抽象路径名的父路径名的路径名字符串,如果没有指定父目录,则返回null。
getParentFile():返回父路径名的抽象路径名。
getPath():将此抽象路径名转换为一个路径名字符串。
public boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
public String getAbsolutePath():返回抽象路径名的绝对路径名字符串。
public boolean canRead():测试应用程序是否可以读取此抽象路径名表示的文件。
public boolean canWrite():测试应用程序是否可以修改此抽象路径名表示的文件。
public boolean exists():测试此抽象路径名表示的文件或者目录是否存在。
public boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
public boolean isFile():是否是一个标准文件。
public long lasModified():返回此抽象路径名表示的文件最后一次被修改的时间。
public long length():返回此抽象路径名表示的文件的长度。
public boolean createNewFile() throws IOException:不存在此文件时,创建新的空文件
public boolean delete():删除此抽象路径名表示的文件或目录。
public void deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
public String[] list():返回此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
public String[] list(FilenameFilter filter):返回此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定的过滤器。
public boolean mkdir():创建此抽象路径名指定的目录。
public boolean mkdirs():创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
public boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
public boolean setLastModified(long time):设置由此抽象路径名所指定的文件或目录的最后一次修改时间。
public boolean setReadOnly():标记此抽象路径名指定的文件或目录,以便只可以对其进行读操作。
public static File createTempFile(String prefix,String suffix,File directory) throws IOException:在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
public static File createTempFile(String prefix,String suffix) throws IOException:在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
public int compareTo(File pathname):按字母顺序比较两个抽象路径名
public int compareTo(Object o):按字母顺序比较抽象路径名与给定对象。
public boolean equals(Object obj):测试此抽象路径名与给定对象是否相等。
public String toString():返回此抽象路径名的路径名字符串。
2. Java FIleReader类
FileReader类从InputStreamReader类继承而来,该类按字符读取流中数据,可以通过以下几种构造方法创建需要的对象。
2.1、在给定从中读取数据的File的情况下创建一个新的FileReader。
FileReader(File file);
2.2、在给定从中读取数据的FileDescriptor的情况下创建一个新
FileReaderFileReader(FileDescriptor fd);
2.3、在给定从中读取数据的文件名的情况下创建一个新FileReader。
FileReader(String fileName)
创建FileReader对象成功后,有以下方法可使用。
public int read() throws IOException:读取单个字符,返回一个int型变量代表读取到的字符。
public int read(char[] c, int offset, int len):读取字符到c数组,返回读取到字符的个数。
package cuiyuee;
import java.io.*; public class FileReaderTest {
public static void main(String args[])throws IOException{
File file = new File("Hello1.txt");//创建文件
file.createNewFile();//创建FileWriter对象
FileWriter writer = new FileWriter(file); //向文件写入内容
writer.write("This is an example");
writer.flush();
//FileWriter的flush()方法是从OutputStreamWriter中继承来的,其作用就是清空缓冲区并完成文件写入操作的
writer.close();
//创建FileReader对象
FileReader fr = new FileReader(file);
char[] a = new char[50];
fr.read(a);//读取数组中的内容
for(char c:a){
System.out.println(c);//一个一个打印字符
}
fr.close();
} }
FileWriter类从OutputStreamReader类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。
在给出 File 对象的情况下构造一个 FileWriter 对象。
FileWriter(File file)
在给出 File 对象的情况下构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
构造与某个文件描述符相关联的 FileWriter 对象。
FileWriter(FileDescriptor fd)
在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。
FileWriter(String fileName, boolean append) 常用方法:
public void write(int c)throws IOException:写入单个字符
public void write(char[] c, int offset, int len):写入字符数组中开始为offset长度为len的某一部分。
public void write(String s, int offset, int len):写入字符串中开始为offset长度为len的某一部分。
package cuiyuee;
import java.io.*; public class FileWriterTest { public static void main(String[] args)throws IOException{
// TODO Auto-generated method stub
File file = new File("F:\\today.txt");
if(!file.exists()){//如果文件不存在,就在F盘下创建today.txt文件
file.createNewFile();
}
FileWriter writer = new FileWriter(file);
writer.write("Hello,I Love You.");
writer.flush();
writer.close(); //创建FileReader对象
FileReader fr = new FileReader(file);
char[] a = new char[50];
fr.read(a);
for(char c:a){
System.out.println(c);
}
fr.close();
} }
四、Java中的目录
File类中有两个方法可以用来创建文件夹
mkdir():成功返回true,失败返回false,失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
mkdirs():创建一个文件夹和它所有的父文件夹。
package cuiyuee;
import java.io.File;
import java.io.File.*; public class DirTest { public static void main(String[] args) {
// TODO Auto-generated method stub
String dirname = "F:/tmp/user/java/bin";
//'\'在Java中是转义字符,所以建议在Windows环境和Linux环境下,用/,创建目录用/
File d = new File(dirname);
d.mkdirs();
} }
删除目录或文件
删除文件可以使用java.io.File.delete()方法。
测试目录F:\java\childDirectory
package cuiyuee;
import java.io.File.*;
import java.io.File; public class DeleteFile {
public static void deleteFolder(File folder){
File[] files = folder.listFiles();
if(files!=null){
for(File f:files){
if(f.isDirectory()){
deleteFolder(f);
}else{
f.delete();
}
}
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
File folder = new File("F:\\java");
deleteFolder(folder);
} }
Java的Stream流的更多相关文章
- Java之Stream流
Stream流的初步学习 初次学习Stream流的学习笔记,学习之前先了解一下函数式接口 概述 API是一个程序向使用者提供的一些方法,通过这些方法就能实现某些功能.所以对于流API来 说,重点是怎么 ...
- 简洁方便的集合处理——Java 8 stream流
背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...
- Java的Stream流式操作
前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什 ...
- Java 之 Stream 流
Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端 一.传统遍历 1.传统集合的多步遍历代码 几乎所有的集合(如 ...
- Java 8 Stream流编程学习
本文是自己学习菜鸟教程中总结的笔记,用于快速找代码,完整的文档见菜鸟教程:Java 8 Stream Stream 使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达 ...
- 【重学Java】Stream流
Stream流 体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把&q ...
- Java基础 | Stream流原理与用法总结
Stream简化元素计算: 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream: ...
- Java中Stream流相关介绍
什么是Stream? Stream是JDK8 API的新成员,它允许以声明性方式处理数据集合 特点 代码简洁: 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好 ...
- java使用stream流批量读取并合并文件,避免File相关类导致单文件过大造成的内存溢出。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
随机推荐
- 从零开始学JAVA(08)-使用SpringMVC4 Restful 风格引用静态文件 css/js/png
在写完helloworld后想给网页加点样式(*.css),结果怎么也显示不了,百度了很多种方法后试行尝试,试验成功并记录下来,方便以后查看. 时隔两年,继续学习JAVA,太久没学了,忘记得差不多,还 ...
- BOM的节点方法和属性
一.HTML DOM >>>>>>>>>>>>>>>>>>>>具体可以参考W3S ...
- [javaSE] GUI(鼠标事件)
调用Button对象的addMouseListener方法,参数:MouseListener对象,这个类是个接口,需要实现以下方法 mouseClicked mousePressed mouseRel ...
- kinect 深度图像去噪算法
算法设计思路 (1)读取16位深度图像到待处理图像帧组: (2)ROI区域计算 由于kinect 彩色摄像头和红外深度摄像头是存在视角偏差的,经过视角对齐后,得到的深度图像是有黑边的.此处通过取帧组第 ...
- ThreadPoolExecutor线程池中线程不能超过核心线程数量的问题
int arg1=2;//核心线程 int arg2=40;//最大线程数量 int arg3=100;//空余保留时间 ThreadPoolExecutor pool=new ThreadPoolE ...
- 理解ResourceBundle.getBundle("dataSourceFactory")
最近在项目文件中看到这样的代码一下子还看不懂 经过他人指点和自己百度,总算明白大致用处. 首先这个方法时java.util的内置方法,主要功能是用于解析properties文件的. ResourceB ...
- spss C# 二次开发 学习笔记(一)——配置数据源
由于项目的需要,使用Spss进行数据统计分析. Spss对于数据统计分析的功能有多强主要是客户关注的事情,我所主要关注的是,Spss的二次开发有多复杂. 学习的基本思路是: (1)首先了解统计基本知识 ...
- php中模糊查询并关联三个select框
1.在php中我们经常用到下拉框,并相互关联,如果下拉框的option非常多,那么我们就要用到模糊搜索功能,那么怎么做呢? 在此功能中,走了弯路,最好不要关联两个select的id值后select属性 ...
- 服务器学习笔记之servlet
初衷 想学习下服务器这边的知识,制定了一条学习路线:java8--->servlet--->springMvc--->springBoot--->springCloud.在此当 ...
- PyCharm添加Selenium与Appium依赖