当前位置:  编程技术>java/j2ee

java中的Io(input与output)操作总结(三)

    来源: 互联网  发布时间:2014-10-22

    本文导语:  说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用 但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失 弄不清到底是为了写出东西,还是为了语言本身 我学习的第一门编程语...

说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用
但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失
弄不清到底是为了写出东西,还是为了语言本身
我学习的第一门编程语言是Python,虽然学的不深
但是它的简单优雅至今令人难忘(呃,其实也就两年前的事……)
我接触的第二门语言是C,它给我的感觉是一种纯粹,一种高效的灵活
而不是类似java,写一堆含糊的代码来实现一个小小的功能
坦白讲,如果一个人在学习自己不感兴趣的东西,那会很累
支撑我的是,我对移动开发有着异常的向往,对Android也相当喜欢,无奈开发Android的主要语言便是Java
虽然已经学了半年,但是我却到现在都不能解释神马企业级开发到底有哪些东西
我想要的,无非就是把编程当作生活中的一种调情,如果想要某个功能,就去实现,用尽可能简单的方式
甚至我的猜想是,等到日后发展,编程这门技术如同每个人使用office一般的时候
那么作为程序员的你们是该有多艰辛?
要知道,一个人将自己内心的利益盖过真正的想法,这是相当可怕的……
因此,每个人都应该用自己喜欢的,觉得高效的方式,做自己最想要做的
好了,说了那么多,我的目的其实只有一个
难道我会告诉你,我根本就搞不懂,也不想搞懂java那些复杂的垃圾语法么?
我只用那些最简单最好用的东西……
java以前的那些io写法我就懒得记录了,主要是System类对IO的支持
如果你觉得我写的代码不够深沉,那你就喷吧,可喷完之后你还能干些什么呢?

现在,步入正题……
这一节我们来讲Scanner类和PrintWriter类的用法

Scanner类
实例1:从键盘读取
代码如下:

import java.util.Scanner;
public class Demo {
public static void main(String[] args ) {
Scanner input = new Scanner(System.in);
System.out.println("请输出一个整数:");
int i = input.nextInt();
System.out.println("你输入的整数是:" + i);
}
}

以上演示的只是读取一个整数,当然还有读取浮点数和其他数据类型的方法,比较简单,查看API即可

 
实例2:从字符串读取

代码如下:

import java.util.Scanner;
public class Demo {
public static void main(String[] args ) {
//这里的rn是换行符,Linux下其实只用n即可
Scanner input = new Scanner("hellornworldrn");
//循环读取,hasNext()方法和集合框架里面的一样使
while(input.hasNext()) {
//每次读取一行,别的读取方法见API,比较简单
String s = input.nextLine();
System.out.println(s);
}
}
}


实例3:从文件读取

代码如下:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Demo {
public static void main(String[] args ) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
File f = new File(path);
Scanner input = null;
try {
//从文件构造Scanner对象,有可能产生异常
input = new Scanner(f);
while(input.hasNext()) {
String s = input.nextLine();
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
input.close();
}
}
}

这里要注意的是,从文件创建Scanner对象得先要有File对象,当然你可以使用匿名对象来创建
此外,还需捕捉异常和关闭文件流


PrintWriter类
实例4:向文件写入内容

代码如下:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
//创建文件对象
File file = new File(path);
PrintWriter p = null;
try {
//此处构造函数还可以传其他对象,具体参考API文档
p = new PrintWriter(file);
//向文件写入一行,此外还有print()和printf()方法
p.println("如果有一天我回到从前");
p.println("回到最原始的我");
p.println("你是否会觉得我不错");
//刷新流
p.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
p.close();
}
}
}


与PrintWriter类似的还有一个PrintStream类,此处以PrintWriter举例是因为文本文件具有人为可读性
而二进制文件(字节模式)则需要使用专门的程序来读取
可能有人会问:FileOutputStream、 FileWriter都能写文件,那么为何还需要PrintWriter和PrintStream类
如果细看API文档,可以知道前者单纯的字符写入流和字节写入流操作的方式大多用数组进行
对文件的细化处理非常不方便,而PrintWriter和PrintStream则很好的解决了这一问题,提供print()等方法
并且,PrintWriter和PrintStream对于不存在文件对象的情况下会直接创建,如果已有文件对象
它们则会把原有文件给覆盖掉,却没有增加方法

解决这问题也很简单,再看API文档
PrintWriter有一个构造方法PrintWriter(Writer out),也就是能够传入Writer对象
PrintStream有一个构造方法PrintStream(OutputStream out),也就是能传入OutputStream对象
因此,我们这样写就可以了
new PrintWriter(new FileWriter(file,true))
new PrintStream(new FileOutputStream(file,true))
既能增加数据,也能更高效的处理文件,见如下代码示范

实例5:实现PrintWriter的数据追加功能

代码如下:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
//创建文件对象
File file = new File(path);
PrintWriter p = null;
try {
//利用FileWriter方式构建PrintWriter对象,实现追加
p = new PrintWriter(new FileWriter(file,true));
p.println("尼玛 这一句就是追加的 看到没");
p.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
//我们来小心翼翼的关闭流,好吧^_^
p.close();
}
}
}

看,这样就能实现追加效果了,最后一行便是


System类对IO的支持
实例6:System类中的写入

代码如下:

import java.io.IOException;
import java.io.OutputStream;
public class Demo {
public static void main(String[] args) {
//别忘了,OutputStream是所有字节写入流的父类
OutputStream out = System.out;
try {
//写入数据,只能是数组,所以用getBytes()方法
out.write("Hello,bitch!rn".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}

注意,此处正好印证了System.out的覆写行为
如果想学好io,整个io体系中的多态需要了解清楚才能驾轻就熟


实例7:System类中的读取

代码如下:

import java.io.IOException;
import java.io.InputStream;
public class Demo {
public static void main(String[] args) {
//别忘了InputStream是所有字节输入流的父类
InputStream in = System.in;
System.out.print("请输入文字: ");
byte[] buf = new byte[1024];
int len = 0;
try {
//将输入的数据保证到数组中,len记录输入的长度
len = in.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
//用字符串的方式打印数组中的数据
System.out.println("你的输入是: " + new String(buf,0,len));
}
}

看,这样就能从键盘获取内容并且打印了


需要注意的是,这里的数组大小是1024字节
一旦输入的数据超过1024字节,那么超过的内容将被截取掉,所以此程序有局限性
并且,一个中文占两个字节,输入中文有时候会被意外截取掉
相信我,每个程序都是俺亲自编写编译的~!!!
实例8:利用BufferedReader实现对键盘的读取

代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Demo {
public static void main(String[] args) {
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入文本:");
try {
String str = b.readLine();
System.out.println("你输入的是:" + str);
} catch (IOException e) {
e.printStackTrace();
}
//循环读取方式
/*
while(true) {
System.out.print("请输入文本:");
String str = null;
try {
str = b.readLine();
} catch (IOException e) {
e.printStackTrace();
}
//如果输入over就结束循环
if("over".equals(str)) {
break;
}
System.out.println("你输入的是:" + str);
}
*/
try {
//关闭流,不耐烦的就直接抛
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

这样做相对于上面一个方法的好处是:不用关心数组大小的问题
BufferedReader有一个最重要的方法就是readLine(),每次读取一行

    
 
 

您可能感兴趣的文章:

  • java操作excel2007文档介绍及代码例子
  • java执行操作系统命令的问题:如何判断多个操作系统?
  • java初学者问:java操作平台是什么?用什么工具?
  • 我是java新手,请问java中与平台相关的操作是怎样实现的
  • Java的XML操作类库 JDOM
  • Java操作系统 JNode
  • Java 操作 Excel 的类库 jExcelApi
  • JAVA与数据库操作问题
  • 请问又没有java控制.exe或操作注册表的方法?
  • Java的Excel操作包 OpenXLS
  • Java和DLL(COM)互操作 Jawin
  • 寻求java对串口操作的帮助
  • 小弟有如下问题:JAVA中怎样实现对操作平台的句柄!谢谢了:)
  • java 对树的操作,TreeSet,能否插入相同的数据,如果相同,如何解决
  • java的操作平台是什么?用什么工具?
  • JAVA可以获得操作系统的临时目录的路径吗?
  • Java类文件操作库 Barista
  • Java程序中能否直接操作本地文件?
  • 在Java里,有没有直接对XML文件进行操作的函数?
  • java中判断本机操作系统的类和方法
  • 怎样用JAVA语言实现对串口的操作?
  • java获取时间的方法总结
  • Java Map的几种循环方式总结
  • JAVA读取属性文件的几种方法总结
  • java map遍历的四种方法总结
  • java中的移位运算符心得总结
  • java中的十个大类总结
  • java中的正则操作方法总结
  • 基于java中正则操作的方法总结
  • 浅析java程序中hibernate的应用总结
  • Java中的小知识点总结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.imageio类imagewriter的类成员方法: output定义及介绍
  • java中的Io(input与output)操作总结(四)
  • java命名空间javax.tools枚举standardlocation的类成员方法: source_output定义及介绍
  • java中的Io(input与output)操作总结(一)
  • java命名空间javax.tools枚举standardlocation的类成员方法: class_output定义及介绍
  • java命名空间javax.swing.text.html类htmlwriter的类成员方法: output定义及介绍
  • java命名空间javax.print.attribute.standard类printerstatereason的类成员方法: output_tray_missing定义及介绍
  • java命名空间javax.imageio.spi类imagewriterspi的类成员方法: standard_output_type定义及介绍
  • java命名空间javax.print.attribute.standard类printerstatereason的类成员方法: output_area_full定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: class_output定义及介绍
  • java命名空间javax.xml.bind接口marshaller的类成员方法: jaxb_formatted_output定义及介绍
  • java命名空间javax.xml.transform接口result成员方法: pi_disable_output_escaping定义参考
  • java命名空间javax.print.attribute.standard类printerstatereason的类成员方法: output_area_almost_full定义及介绍
  • java命名空间javax.swing.text类abstractwriter的类成员方法: output定义及介绍
  • java命名空间javax.xml.transform接口result成员方法: pi_enable_output_escaping定义参考
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3