java基础知识之输入输出

Java的System.out来表示标准输出设备,默认是先显示器;System.in表示标准输入设备,默认是键盘;可以使用Scanner类从控制台输入,Scanner在java.util类里面。
使用Scanner类用来从控制台读取字符串和基本类型数值。为了从键盘读取,需要为System.in创建一个Scanner。
Scanner input = new Scanner(System.in);
读取double值
double radius = input.nextDouble();
读取字符串
Scanner input = new Scanner(System.in);
System.out.println("Please input:");//必须要写,为了打开console
String s1 = input.next();
String s2 = input.next();
String s3 = input.next();
System.out.println("s1 is:" + s1);
System.out.println("s2 is:" + s2);
System.out.println("s3 is:" + s3);
input.close();//注意关闭
next读取以空白字符结束的字符串即‘ ' '\t' '\f' '\r' '\n'
nextLine()读取一整行文本。
从控制台读取字符
Scanner input = new Scanner(System.in);
System.out.println("Please input:");
String s = input.nextLIne();
char ch = s.charAt(0);
使用Scanner从文件中读取数据
java.io.File file = new java.io.File("image/filename");
Scanner input = new Scanner(file);
。。。。

Scaner如何工作
nextByte(),nextInt()等都称为标记读取方法,默认分隔符是空格,可以使用useDelimiter(String regrex)设置新的分隔符模式。


输入输出重定向
输入重定向
java SentineValue < input.txt
这个相当于把标准输入键盘重定向到文件,注意和java读取文件区分;
输出重定向
java ClassName > output.txt
将标准输出控制台(显示器)重定向为文本

向main方法传递字符串
java TestMain arg0 arg1 arg2
arg0 arg1 arg2都是字符串,在命令行中出现时,不需要加引号
java TestMain “First num” alpha 53
使用3个字符串“First num” alpha 53启动程序。“First num”是一个字符串,53被当成一个字符串来处理
当调用main方法时,Java解释器会创建一个数组来存储命令行参数然后将该数组的引用传递给args。
args = new String【n】;
如果运行程序没有传递字符串,那么使用new Strig【0】来创建数组,args是对这个空数组的引用,args不是null,args.length是0;
public class MainInput {
public static void main(String[] args) {
if(args.length != 3)
System.out.println("Please input 3 charcter:");
else
System.out.println("args[0]=" + args[0] +
" args[1]=" + args[1] + " args[2]=" + args[2]);
}
}

File类
File包含了一个获得文件/目录的属性,以及对文件/目录进行改名和删除的方法。
java.io.File file = new java.io.File("image/us.gif");

文件输入和输出
使用Scanner类从文件中读取数据,使用PrinterWriter类向文本文件中写入数据。
File对象创建了文件或路径的属性,但是它即不包含创建文件的方法,也不包括从/向文件读/写数据的方法。文本文件本质上是存储在磁盘上的字符
使用PrinterWriter写数据
PrintWriter output = new PrintWriter(filename);
然后就可以通过print,println,printf来向文件中写数据了。
写完了关闭文件
output.close();

忘记关闭文件,使用try-with-resources
try(声明和创建资源) {
使用资源来处理文件
}
实例:
try(java.io.PrintWriter output = new java.io.PrintWriter(file);) {
output.print("Java");
...
}

从web上读取数据
为了读取这个文件,首先使用java.net.URL类的这个构造方法
URL url = new URL("http://www.baidu.com");
必须要加http://
然后用Scanner读取就ok了。


二进制IO
二进制IO类
抽象类InputStream是读取二进制数据的跟类,抽象类OutputStream是写入二进制数据的跟类。
二进制IO所有方法都声明为java.io.Exception或其之类
InputStream:
FileInputStream 用于向文件写字节,默认重写当前文件,如果要最加,将append设置为true
FilterInputStream: 使用过滤数据流,可以读取到整数值,双精度值和字符串
DataInputStream 处理基本数值类型
BufferInputStream 可以减少磁盘的读次数来提高输入输出的速度,磁盘上的整块数据一次性的读入到内存中的缓冲区,然后从缓冲区将个别数据传递到程序中,缓冲区默认大小512字节
ObjectInputStream 用于读可序列化的对象


OutputStream:
FileOutputStream 用于向文件读字节,默认重写当前文件,如果要最加,将append设置为true
FilterOutputStream: 使用过滤数据流,可以输出到整数值,双精度值和字符串
DataOutputStream 处理基本数值类型
BufferOutputStream 可以减少磁盘的写次数来提高输入输出的速度,从程序中将个别数据传递到内存中的缓冲区,然后内存中的缓冲区一次性的写入到磁盘上,缓冲区默认大小512字节
ObjectOutputStream 用于写可序列化的对象

serializable接口
并不是每个对象都可以写到输出流,可以写入到输出流中的对象称为可序列化对象(serializable)。因为可序列化对象是java.io.Serializable接口的实例,所以,可序列化对象必须实现Seriablizable接口
java.io.Serializable接口是一种标记接口,因为它没有方法,所以,不需要为实现java.io.Serializable接口增加额外的代码。

可序列化数组
如果数组中的所有元素都是可序列化的,这个数组就是可序列化的,一个完整的数组可以用ObjectOutputStream.writeObject方法写入文件,用ObjectInputStream.readObject方法恢复。

上面二进制io中使用的流都是只读的(read.only)或只写的(write.only),这些流称为顺序流。使用顺序流打开的文件称为顺序文件。顺序文件的内容不能更新。
Java提供了RandomAccessFile类实现了DataInput和DataOutput接口。
DataInput接口定义了读取基本数据类型和字符串的方法
DataOutput接口定义了写入基本数据类型和字符串的方法
RandomAccessFile可以指定两种模式(“r”或“rw”)之一。“r”只读,“rw"即允许读也允许写。如果不想改动文件,就医”r“模式打开。











展开阅读全文

没有更多推荐了,返回首页