首页 > 代码库 > java之IO整理(上)
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(); } }
java之IO整理(上)