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 ...
随机推荐
- [Mysql 查询语句]——集合函数
count() 统计记录条数 select count(*) from student; +----------+ | count(*) | +----------+ | +----------+ s ...
- Angular2-给属性做双向绑定
呈现一个实体对象的DOM结构,这个DOM有个自定义属性是需要动态赋值的,比如说 item.data 要绑到自定义属性 data 上:你可能会这么写: data="{{item.data}}& ...
- 在Ubuntu16.04.4和Windows10上安装jdk
在Ubuntu16.04.4和Windows10上安装jdk 一.在Ubuntu16.04.4上安装jdk 1.下载jdk安装包 首先我们在oracle官网上下载jdk-8u161-linu ...
- js 千分位符号 正则方法
function toThousands(num) { return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');}
- [PHP] PHP数组的实现哈希表(HashTable)结构
PHP中使用最为频繁的数据类型非字符串和数组莫属,使用哈希表实现的PHP数组.1.数据结构:保存哈希表容器,保存数据的容器2.哈希函数实现:需要尽可能的将不同的key映射到不同的槽(bucket)中, ...
- 启动Hadoop时候datanode没有启动的原因及解决方案
有时候我们start-dfs.sh启动了hadoop但是发现datanode进程不存在 一.原因 当我们使用hadoop namenode -format格式化namenode时,会在namenode ...
- Redis概述与安装
一.什么是Redis 由c语言编写的,以键值对的形式存储的数据库. 缓存技术(驻留在内存中) key:value 支持5种数据类型: String Hash(哈希表) list ...
- SQL Server Metadata
http://www.devart.com/dotconnect/sqlserver/docs/MetaData.htmlhttps://msdn.microsoft.com/en-us/librar ...
- Vijos / 题库 / 输油管道问题
背景 想念car的GF,car就出了道水题! 描述 某石油公司计划建造一条由东向西的主输油管道.该管道要穿过一个有n 口油井的油田.从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连.如果 ...
- JavaScript初学
今天学习了js的基础知识,自我归纳如下: 第一部分:js变量的声明和引入 js声明1-直接声明js代码块,使用<script></script> 2-引入外部声明,即创建一个 ...