Java 流(Stream)、文件(File)和IO Dear 丶 2022-05-23 04:42 180阅读 0赞 **1、何为流?** * 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。 -------------------- **2、控制台输入的读取与输出** (1)读取控制台输入:Java的控制台输入由System.in完成,为了获得一个绑定控制台的字符流,一般将System.in包装在一个BufferedReader对象中来创建一个字符流: BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); (2)从控制台读取多字符输入:使用BufferedReader对象中的read()方法从输入流中读取**一个字符**作为**整数值**返回。流结束返回-1。该方法抛出IOException。 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); do{ c=(char)br.read(); System.out.println(c); }while(c!='q'); (3)从控制台读取字符串:使用BufferedReader对象中的readLine()方法从输入流中读取字符串。 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); do{ String str=br.readLine(); System.out.println(str); }while(!str.equals("qqq")); \*注:JDK5以后,也可以用Java Scanner类来读取控制台的输入。 (4)控制台输出:控制台的输出可以由print()/println()/write()方法实现,这些方法都由类PrintStream定义,System.out是该类对象的一个引用: int b; b='a'; System.out.write(b); System.out.write('\n'); System.out.print(b);//System.out.println(b); -------------------- **3、读写文件:FileInputStream、FileOutputStream** (1)FileInputStream:用于从目标文件中读取数据。 * 创建对象: /*第一种方法:*/ InputStream is=new FileInputStream("C:/Users/.../Desktop/file's name"); /*第二种方法*/ File f=new File("C:/Users/.../Desktop/file's name"); InputStream is=new FileInputStream(f); * InputStream对象的操作方法: ![这里写图片描述][70] (2)FileOutputStream:打开文件(如果流在打开文件进行输出前文件不存在,该流会自动创建该文件)并向目标文件中写数据。 * 创建方法: /*第一种方法:*/ OutputStream os=new FileOutputStream("C:/Users/.../Desktop/file's name"); /*第二种方法*/ File f=new File("C:/Users/.../Desktop/file's name"); OutputStream is=new FileOutputStream(f); * OutputStream对象的操作方法: ![这里写图片描述][70 1] * InputStream和OutputStream的演示实例: /* *由于在流中读取和写入文件时是以二进制形式进行存取的,可能出现乱码的现象, *故通过创建OutputStreamWriter对象和InputStreamReader对象可以设置编码格式来解决乱码*问题(Windows默认编码格式是GBK) */ import java.io.*; public class FileStreamTest { public static void main(String[] args) throws IOException{ byte[] bwrite= {1,2,3,4,5}; OutputStream os=new FileOutputStream("C:/Users/.../Desktop/test.txt"); OutputStreamWriter osw=new OutputStreamWriter(os); for(int i=0;i<bwrite.length;i++) { osw.append(String.valueOf(bwrite[i])); //写入到缓冲区中 osw.append("\r\n"); //换行 } osw.close(); //关闭写入流,同时把缓冲区的内容写入指定的文件 os.close(); //关闭输出流,释放系统资源 InputStream is=new FileInputStream("C:/Users/.../Desktop/test.txt"); InputStreamReader isr=new InputStreamReader(is); StringBuffer sb=new StringBuffer(); while(isr.ready()) { sb.append((char)isr.read());//转成char类型并加入到StringBuffered对象中 } System.out.println(sb.toString()); isr.close(); //关闭读取流 is.close(); //关闭输入流,释放系统资源 } } -------------------- **4、Java 中的目录** (1)创建目录 * mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。 * mkdirs()方法创建一个文件夹和它的所有父文件夹。 import java.io.File; public class CreatDir { public static void main(String[] args) { File f=new File("C:/Users/.../Desktop/test1"); File f0=new File("C:/Users/.../Desktop/test"); f0.mkdirs(); f.mkdir(); } } (2)读取目录: * 一个目录其实就是一个File对象。 * 通过调用File对象的isDerectory()判断 File对象是否为目录,是则返回true。调用对象的list()方法来提取该目录下包含的文件和文件夹列表。 import java.io.File; public class DirList { public static void main(String[] args) { String dirname="C:/Users/.../Desktop/foldername"; File f=new File(dirname); if(f.isDirectory()) { //如果f是一个目录 String[] dir=f.list(); //提取目录文件(夹)列表 System.out.println("目录 : "); for(int i=0;i<dir.length;i++) { File dirf=new File(dirname+"/"+dir[i]); if(dirf.isDirectory()) { System.out.println(dir[i]+" is a directory~"); } else { System.out.println(dir[i]+" isn't a directory~"); } } }else { System.out.println("The selected file is not a Directory!"); } } } (3)删除目录或文件:删除文件使用 java.io.File.delete()方法。 import java.io.File; public class DirDelete { public static void main(String[] args) { File f=new File("C:/Users/.../Desktop/test"); FolderDelete(f); } public static void FolderDelete(File folder) { File[] files=folder.listFiles(); //listFiles()方法包含完整的路径,而list()方法只代表当前的文件名或文件夹名 if(files!=null) { for(File f : files) { if(f.isDirectory()) { FolderDelete(f); }else { f.delete(); //删除文件 } } } folder.delete(); //删除文件夹(此时该目录文件夹及其子文件夹均为空文件夹) } } -------------------- [70]: /images/20220523/4a2a3414f359452c8f017cceaea7679a.png [70 1]: /images/20220523/d5e9a886226748ceac34d8b11d576f8c.png
还没有评论,来说两句吧...