Java 的控制台输入由 System.in 完成。
为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。
下面是创建 BufferedReader 的基本语法:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestRead {
public static void main(String[] args) throws IOException {
char c;
// 使用 System.in 创建 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入字符, 按下 'q' 键退出。");
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestRead {
public static void main(String[] args) throws IOException {
// 使用 System.in 创建 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text.");
System.out.println("Enter 'end' to quit.");
do {
str = br.readLine();
System.out.println(str);
} while(!str.equals("end"));
}
}
FileInputStream
该流用于从文件读取数据,它的对象可以用关键字 new 来创建。
有多种构造方法可用来创建对象。
可以使用字符串类型的文件名来创建一个输入流对象来读取文件
File f = new File("D:/java/hello");
InputStream out = new FileInputStream(f);
创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。
1 | public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
2 | protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
3 | public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。 |
4 | public int read(byte[] r) throws IOException{} 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 |
5 | public int available() throws IOException{} 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
FileOutputStream
该类用来创建一个文件并向文件中写数据。
如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
File f = new File("D:/java/hello");
OutputStream f = new FileOutputStream(f);
1 | public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
2 | protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
3 | public void write(int w)throws IOException{} 这个方法把指定的字节写到输出流中。 |
4 | public void write(byte[] w) 把指定数组中w.length长度的字节写到OutputStream中。 |
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class fileStreamTest {
public static void main(String[] args) throws IOException {
File f = new File("a.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();
// 关闭输入流,释放系统资源
}
}
Java中的目录
创建目录:
File类中有两个方法可以用来创建文件夹:
- mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
- mkdirs()方法创建一个文件夹和它的所有父文件夹。
public class TestFile {
public static void main(String args[]) {
String dirname = "D:/Program Files (x86)/java";
File d = new File(dirname);
d.mkdirs();
}
}
import java.io.File;
public class TestFile {
public static void main(String args[]) {
String dirname = "D:/Program Files (x86)/";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println("目录 " + dirname);
String s[] = f1.list();
for (int i = 0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " 是一个目录");
} else {
System.out.println(s[i] + " 是一个文件");
}
}
} else {
System.out.println(dirname + " 不是一个目录");
}
}
}
import java.io.File;
public class TestFile {
public static void main(String args[]) {
File folder = new File("D:/Program Files (x86)/");
deleteFolder(folder);
}
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();
}
}
}
folder.delete();
}
}
1:File(掌握)
(1)File是用来描述硬盘上的文件或者文件夹的
(2)File的构造方法
A:File file = new File("d:\\demo\\a.txt");
B:File file = new File("d:\\demo","a.txt");
C:File file = new File("d:\\demo");
File file2 = new File(file,"a.txt");
(3)File的成员方法(自己补齐方法和中文意思)
A:创建功能
CreateNewFile()
mkdir()
mkdirs()
B:删除功能
delete()
C:重命名功能
renameTo()
D:判断功能
isDirectory()
isFile()
exists()
isHidden()
canWrite()
canRead()
E:基本获取功能
get三个
lastModifiedTime
length
F:高级获取功能
String[] filename = file.list()
File[] fileArray = file.listFiles()
G:文件名称过滤器
import java.io.File;
/*
* 需求:请把d盘目录下所有的.jpg结尾的文件名称给输出出来
*
* 分析:
* A:封装目录
* B:获取该目录下所有的文件或者文件夹的File数组
* C:遍历该File数组,得到每一个File对象
* D:判断该File对象
* 先判断是否是文件
* 是:
* 继续判断是否以.jpg结尾
* 是:输出名称
*/
public class FileTest {
public static void main(String[] args) {
// 封装目录
File folder = new File("d:\\");
// 获取该目录下所有的文件或者文件夹的File数组
File[] fileArray = folder.listFiles();
// 遍历该File数组,得到每一个File对象
for (File file : fileArray) {
// 先判断是否是文件
if (file.isFile()) {
// 继续判断是否以.jpg结尾
if (file.getName().endsWith(".jpg")) {
System.out.println(file.getName());
}
}
}
}
}
import java.io.File;
/*
*public boolean isDirectory():是否是文件夹
*public boolean isFile():是否是文件
*public boolean exists():是否存在
*public boolean canRead():是否可读
*public boolean canWrite():是否可写
*public boolean isHidden():是否隐藏
*/
public class FileDemo4 {
public static void main(String[] args) {
File file = new File("demo.txt");
System.out.println("isDirectory:" + file.isDirectory());
System.out.println("isFile:" + file.isFile());
System.out.println("exists:" + file.exists());
System.out.println("canRead:" + file.canRead());
System.out.println("canWrite:" + file.canWrite());
System.out.println("isHidden:" + file.isHidden());
}
}
package com.aijie.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
/**
* @author E-mail:
* @version 2018年6月3日 下午6:36:40
*/
public class BufferedInputFile {
public static String read(String filename) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(filename));
String s;
StringBuilder sb = new StringBuilder();
while((s = in.readLine())!=null)
sb.append(s+"\n");
in.close();
return sb.toString();
}
public static void create(String url){
File file = new File(System.getProperty("user.dir")+url);
if (!file.exists()){
try {
System.out.println("文件创建:"+file.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
}else{
System.out.println("文件已经存在");
}
}
public static void main(String[] args) throws IOException {
String url = "\\a.txt";
/**
* 新建文件
*/
create(url);
/**
* 写文件内容
*/
StringBuffer str = new StringBuffer("");
//str.append("富强\n民主\n文明\n和谐\n自由\n平等\n公正\n法治\n爱国、敬业、诚信、友善");
str.append("aa\nbb\nc\nd\nEF\nGG");
write(str.toString().replace("、", "\n"),url);
/**
* Test1:打开一个文本,每次读取一行。将每行作为一个String读入,并将那个String对象置于一个LinkedList中
* 并按相反的顺序打印出LinkedList所有行
*/
Test1(url);
//System.out.println(ClassLoader.getSystemResource(""));
//System.out.println(System.getProperty("user.dir"));
//System.out.println(new File("/").getAbsolutePath());
//System.out.println(read("E:/workspace/dingaijie/src/com/aijie/io/BufferedInputFile.java"));
// System.out.println(read(System.getProperty("user.dir")+"/src/com/aijie/io/BufferedInputFile.java"));
}
public static void Test1(String url) throws IOException{
LinkedList<String> list = new LinkedList<String>();
try {
BufferedReader in = new BufferedReader(new FileReader(System.getProperty("user.dir")+url));
String s;
while((s = in.readLine())!=null)
list.add(s);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for(int i=list.size()-1;i>=0;i--)
System.out.print(changeLU(list.get(i)));
System.out.println("list:"+list);
System.out.println("list.size():"+list.size());
}
/**
* 将String大小写互转
* @Title: changeLU
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param str
* @param: @return
* @return: String
* @throws
*/
public static String changeLU(String str){
StringBuffer str1=new StringBuffer();
String str2;
for(int i=0;i<str.length();i++){
str2=str.substring(i,i+1);
if(str2.toLowerCase().equals(str2))//如果是小写,则转换成大写
str2=str2.toUpperCase();
else //如果是小写,转换成大写
str2=str2.toLowerCase();
str1.append(str2);
}
return str1.toString();
}
public static void write(String str,String url){
//System.out.println(str);
try {
FileWriter fw = new FileWriter(System.getProperty("user.dir")+url);
fw.write(str);
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}