/*//创建一个新文件
public static void main(String[] args) {
File file=new File("D:\\hello.txt");
try {
file.createNewFile();
} catch (IOException e) { e.printStackTrace();
}
}*/ /*//File类的两个常量
public static void main(String[] args) {
System.out.println(File.separator);//结果: \
System.out.println(File.pathSeparator);//结果: :
}*/ /*//删除一个文件
public static void main(String[] args) {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
if(file.exists()){
file.delete();
}else {
System.out.println("文件不存在!");
}
}*/ /*//创建一个文件夹
public static void main(String[] args) {
String fileName="D:"+File.separator+"hello";
File file=new File(fileName);
file.mkdirs();
}*/ /*//使用listFiles列出指定目录的全部文件
//* listFiles输出的是完整路径
public static void main(String[] args) {
String fileName="D:"+File.separator;
File file=new File(fileName);
File[] str=file.listFiles();
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
}*/ /*使用isDirectory判断一个指定的路径是否为目录*/
/*public static void main(String[] args) {
String fileName="D:"+File.separator;
File file=new File(fileName);
if(file.isDirectory())
System.out.println("yes");
else {
System.out.println("no");
}
}*/ /*列出指定目录的全部内容*/
/*public static void main(String[] args) {
String fileName="D:"+File.separator;
File file=new File(fileName);
print(file);
}
public static void print(File f){
if(f!=null){
if(f.isDirectory()){
File[] fileArray=f.listFiles();
if(fileArray!=null){
for(int i=0;i<fileArray.length;i++){
print(fileArray[i]);//递归调用
}
}
}else {
System.out.println(f);
}
}
}*/ /*使用RandomAccessFile写入文件
public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
randomAccessFile.writeBytes("1234567890");
randomAccessFile.writeInt(42);
randomAccessFile.writeBoolean(true);
randomAccessFile.writeChar(88);
randomAccessFile.writeDouble(12.678);
randomAccessFile.writeFloat(23.5f);
randomAccessFile.close();
}//如果你此时打开hello。txt查看的话,会发现那是乱码。
*/
/*字节流
* 向文件中写入字符串
public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
OutputStream outputStream=new FileOutputStream(file);
String string="Hello";
byte[] bs=string.getBytes();
outputStream.write(bs);
outputStream.close();
}*/ /**
* 字节流
* 向文件中一个字节一个字节的写入字符串
* @throws IOException
* *//*
public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
OutputStream outputStream=new FileOutputStream(file);
String string="Hello GG";
byte[] bs=string.getBytes();
for(int i=0;i<bs.length;i++){
outputStream.write(bs[i]);
}
outputStream.close();
}*/ /**
* 字节流
* 向文件中追加新内容:
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
OutputStream outputStream=new FileOutputStream(file,true);
String string="Hello MM";
//String str="\r\nRollen"; 可以换行
byte[] bs=string.getBytes();
for(int i=0;i<bs.length;i++){
outputStream.write(bs[i]);
}
outputStream.close();
}*/ /**
* 字节流
* 读文件内容
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
InputStream inputStream=new FileInputStream(file);
//byte[] bs=new byte[1024];//预先申请了一个指定大小的空间
byte[] bs=new byte[(int) file.length()];
inputStream.read(bs);
System.out.println("文件长度为:"+file.length());
inputStream.close();
System.out.println(new String(bs));
}*/ /**
* 字节流
*读文件
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
InputStream inputStream=new FileInputStream(file);
byte[] bs=new byte[1024];
int count=0;
int temp=0;
while((temp=inputStream.read())!=(-1)){//当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的
bs[count++]=(byte) temp;
}
inputStream.close();
System.out.println(new String(bs));
}*/ /**
* 字符流
* 写入数据
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
Writer out=new FileWriter(file);
String string="朋友";
out.write(string);
out.close();
}*/ /**
* 字符流
* 从文件中读出内容
* @throws IOException
*采用循环读取的方式,因为我们有时候不知道文件到底有多大。
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
char[] ch=new char[100];
Reader reader=new FileReader(file);
int temp=0;
int count=0;
while((temp=reader.read())!=(-1)){
ch[count++]=(char) temp;
}
reader.close();
System.out.println(new String(ch, 0, count));
}*/

/**
* 将字节输出流转化为字符输出流
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
Writer out=new OutputStreamWriter(new FileOutputStream(file));
out.write("MM");
out.close();
}*/

/**
* 将字节输入流变为字符输入流
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
Reader reader=new InputStreamReader(new FileInputStream(file));
char[] cs=new char[100];
int len=reader.read(cs);
System.out.println(new String(cs, 0, len));
reader.close();
}*/

/**
* 使用内容操作流将一个大写字母转化为小写字母
* @throws IOException
* 内容操作流一般用来生成一些临时信息的,这样可以避免删除的麻烦。
* */
/*public static void main(String[] args) throws IOException {
String str="ADFGHJKLUYTG";
ByteArrayInputStream inputStream=new ByteArrayInputStream(str.getBytes());
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
int temp=0;
while((temp=inputStream.read())!=(-1)){
char ch=(char) temp;
outputStream.write(Character.toLowerCase(ch));
}
String outStr= outputStream.toString();
inputStream.close();
outputStream.close();
System.out.println(outStr);
}*/

1、字节流和字符流的区别:

字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候,是会用到缓冲区的,是通过缓冲区来操作文件的。

使用字节流好还是字符流好呢?

答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

2、文件的复制:

方法一:DOS下就有一个文件复制功能

方法二:用程序

/**
* 文件的复制
* @throws IOException
* 思路:从一个文件中读取内容,边读边写入另一个文件。
* */
public static void main(String[] args) throws IOException {
String helloFileName="D:"+File.separator+"hello.txt";
String rollenFileName="D:"+File.separator+"rollen.txt";
File file1=new File(helloFileName);
File file2=new File(rollenFileName);
if(!file1.exists()){
System.out.println("被复制的文件不存在!");
System.out.println(1);
}
InputStream inputStream=new FileInputStream(file1);
OutputStream outputStream=new FileOutputStream(file2);
if(inputStream!=null&&outputStream!=null){
int temp=0;
while((temp=inputStream.read())!=(-1)){
outputStream.write(temp);
}
}
inputStream.close();
outputStream.close();
}

3、管道流

管道流主要用以进行两个线程之间的通信。

PipedOutputStream 管道输出流

PipedInputStream 管道输入流

/*消息发送类*/
public class Send implements Runnable{
private PipedOutputStream out=null;
public Send() {
out=new PipedOutputStream();
}
public PipedOutputStream getOut(){
return this.out;
}
@Override
public void run() {
String message="hello MM";
try {
out.write(message.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /*接受消息类*/
public class Recive implements Runnable{
private PipedInputStream input=null;
public Recive() {
input=new PipedInputStream();
}
public PipedInputStream getInput(){
return this.input;
}
@Override
public void run() {
byte[] bs=new byte[1000];
int len=0;
try {
len=this.input.read(bs);
} catch (IOException e) {
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("接收的内容是:"+(new String(bs, 0, len)));
} } /*测试类*/
public static void main(String[] args) {
Send send=new Send();
Recive recive=new Recive();
try {
send.getOut().connect(recive.getInput());//管道连接
} catch (IOException e) {
e.printStackTrace();
}
new Thread(send).start();
new Thread(recive).start();
}
}

4、打印流

/* 使用PrintStream进行输出*/
/*public static void main(String[] args) throws IOException {
PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
printStream.print(true);
printStream.print("GG");
printStream.close();
}*/ /*使用PrintStream进行输出
* 并进行格式化*/
/*public static void main(String[] args) throws IOException {
PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
String name="GG";
int age=26;
printStream.printf("姓名:%s;年龄:%d!",name,age);
printStream.close();
}*/ /*使用OutputStream向屏幕上输出内容*/
public static void main(String[] args) {
OutputStream out=System.out;
try {
out.write("MM".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

  

java之IO整理(上)的更多相关文章

  1. java之IO整理(下)

    一:对象的序列化 对象序列化就是把一个对象变为二进制数据流的一种方法. 一个类要想被序列化,就行必须实现java.io.Serializable接口.虽然这个接口中没有任何方法,就如同之前的clone ...

  2. java之IO整理(中)

    一:打印流/*System.out.println()重定向输出*/ /*public static void main(String[] args) { System.out.println(&qu ...

  3. java中的IO整理

    写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章依旧以例子为主,因为 ...

  4. 金九银十,史上最强 Java 面试题整理。

    以下会重新整理所有 Java 系列面试题答案.及各大互联网公司的面试经验,会从以下几个方面汇总,本文会长期更新. Java 面试篇 史上最全 Java 面试题,带全部答案 史上最全 69 道 Spri ...

  5. 【转】 Java中的IO整理

    写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章依旧以例子为主,因为 ...

  6. Java基础进阶整理

    Java学习笔记整理 本文档是我个人整理的,首先是想通过完成本文档更加扎实自己的基础加强对java语言的理解,然后就是想给入了门的同志们做下贡献. 当然,本文档主要是对java语言基础(当然还有很多基 ...

  7. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  8. 《OD面试》Java面试题整理

    一.面试考察点 1 主语言本身 2 数据库 3 算法 4 Spring/SpringMVC/MyBatis 5 项目经验 1)项目涉及到的技术点深挖: (1)考察候选人技术深度  (2)看候选人遇到问 ...

  9. java学习内容整理

    转自:http://www.cnblogs.com/caoleiCoding/p/6170555.html 首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习j ...

随机推荐

  1. css 中相对定位和绝对定位

    1. css中定位机制有三种: 标准文档流, 浮动, 绝对定位 2. 绝对定位就属于第三种定位, 用到position属性, 下面就是具体设置 相对定位: 相对于自身原有位置(就是普通流的时候)进行偏 ...

  2. d3.js(v5.7)的attr()函数完善(添加obj支持)

    因为习惯了jquery的attr(obj)批量添加属性,所以刚开始看到d3为dom添加属性要一个一个添加的时候真的是十分想吐槽,既然想实现attr(obj),根据传入对象的键值对批量添加dom属性,那 ...

  3. python 函数返回多个值

    参考文献:http://blog.csdn.net/facevoid/article/details/5369146

  4. I.MX6 Kernel BUG at include/linux/netdevice.h:520!

    /*************************************************************************** * I.MX6 Kernel BUG at i ...

  5. ffpmeg下rtmp踩坑记录

    1. flash端发布直播流 2.在 ffplay 命令行中 播放rtmp 直播流 ffplay "rtmp://127.0.0.1:80/live/ss live=1"  一直出 ...

  6. 每天一个linux命令(文件操作):【转载】find 命令概览

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...

  7. BZOJ1101 POI2007 Zap 【莫比乌斯反演】

    BZOJ1101 POI2007 Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b, ...

  8. FastJson的一些使用

    前言 最近经常使用json的一些转换,使用的是fastjson,所以就对fastjson进行了一些汇总,记录下来. 正文 主要的api 首先是一些类库的说明: SerializeWriter:相当于S ...

  9. .NET Core 和 .NET Framework 中的 MEF2

    MEF,Managed Extensibility Framework,现在已经发布了三个版本了,它们是 MEF 和 MEF2. 等等!3 去哪儿了?本文将教大家完成基于 MEF2 的开发.   ME ...

  10. Page View Controllers

    Page View Controllers You use a page view controller to present content in a page-by-page manner. A ...