java之IO整理(上)
/*//创建一个新文件
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();
}
}
最新文章
- MySQL 博客文章目录(2016-08-20更新)
- EF 二级缓存 EFSecondLevelCache
- Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)
- mac攻略(七) -- 环境变量PATH分析
- SharePoint 服务器端对象模型操作用户组(创建/添加/删除)
- Spring注解@Scheduled定时任务
- C#字符补位
- nginx学习笔记1
- UVALive 4255 Guess
- POJ 2002 Squares 哈希
- [PHP学习日志]简单Session的使用
- ef code first 您没有所需权限
- Tp框架获取客户端IP地址
- git使用教程之git基础
- MySQL下载安装配置和Navicat for MySQL的安装配置
- .net core 基于IIS发布
- 连接Linux服务器操作Oracle数据库
- 石子合并 区间dp模板
- Windows上搭建Flume运行环境
- js 和springboot内存图