zoukankan      html  css  js  c++  java
  • 0301 打印流,commons-IO,多线程

    1、打印流

    打印流

    字节打印流:ptintStream

    字符打印流:printWriter

    方法

    void print(String str)输出任何数据

    void println(String str)输出任何数据 并且自动换行

    我们直接用打印流复制文件

    	public static void main(String[] args) throws IOException {
    		//明确数据源
    		FileReader fr=new FileReader("F:\io1127\hello.txt");
    		//添加缓冲流
    		BufferedReader br=new BufferedReader(fr);
    		//明确目的地
    		FileWriter fw=new FileWriter("F:\io1127\hello2.txt");
    		//添加打印流开启走动刷新
    		PrintWriter pw=new PrintWriter(fw,true);
    		//开始复制
    		String line=null;
    		while((line=br.readLine())!=null){
    			pw.println(line);
    		}
    		pw.close();
    		br.close();
    	}
    

      在上述代码中出现了乱码的问题 所以我们需要加入一个转换流去指定一下码表

    	public static void main(String[] args) throws IOException {
    		//明确数据源
    		FileInputStream fis=new FileInputStream("F:\io1127\hello.txt");
    		//添加转换流
    		InputStreamReader isr=new InputStreamReader(fis,"utf-8");
    		//添加缓冲流
    		BufferedReader br=new BufferedReader(isr);
    		//明确目的地
    		FileWriter fw=new FileWriter("F:\io1127\work1\hello.txt");
    		//添加打印流
    		PrintWriter pw=new PrintWriter(fw,true);
    		String line=null;
    		while((line=br.readLine())!=null){
    			pw.println(line);
    		}
    		pw.close();
    		br.close();
    		
    	}
    

      我们注意到 在添加打印流的时候传的参数会有一个布尔值的存在,这是开启刷新功能 ,就不用我们在自己手动调用flush方法去刷新了

    2、commons-IO是好的一套工具类,可以直接调用其中的方法,那么在使用之前需要将jar包导入dao项目文件中

    2-1、FilenameUtils

    这个工具类是主要处理文件路径文件名称

    常用方法

    (1)getExtension(String path) 获取文件的扩展名

    (2)getName(String filename)获取文件名

    (3)isExtension(String fileName,String ext) 判定文件是否以 ext结尾

    代码展示

    	public static void main(String[] args) {
    		//获取扩展名
    		String ext=FilenameUtils.getExtension("F:\io1127\hello.txt");
    		System.out.println(ext);
    		//获取文件名
    		String name=FilenameUtils.getName("F:\io1127\hello.txt");
    		System.out.println(name);
    		//判定文件是否以某后缀结尾
    		Boolean flag=FilenameUtils.isExtension(name, "txt");
    		System.out.println(flag);
    		
    	}
    

      

    2-2、FileUtils

    该类主要是操作文件的移动,读取,判定文件是否存在等等

    常用方法

    (1)、readFileToString(File file)读取文件的内容,返回一个String类型的字符串

    (2)、writeStringToFile(File file,String content) 将content内容写入到file中

    (3)、copyDirectoryToDirectory(File srcDir,File destDir) 复制文件夹

    (4)、copyFile(File srcFile,File destFile)复制文件

    	public static void main(String[] args) throws IOException {
    		//复制文件夹
    		FileUtils.copyDirectoryToDirectory(new File("F:\io1127"), new File("F:\demo"));
    	}
    	//读取文件内容
    	public static void get2() throws IOException{
    		String str=FileUtils.readFileToString(new File("F:\io1127\hello.txt"));
    		System.out.println(str);
    	}
    	//写入文件内容
    	public static void get3() throws IOException{
    		FileUtils.write(new File("F:\io1127\hello.txt"), "123");
    	}
    	//复制文件
    	public static void get4() throws IOException{
    		FileUtils.copyFile(new File("F:\io1127\hello.txt"), new File("F:\io1127\work\hello.txt"));
    	}
    

      

    3、多线程

    进程:一个程序进入内存运行 则叫一个进程

    线程:线程是一个进程的执行单元,一个进程至少有一个线程,一个进程可以有好多个线程,这个应用程序也可以称之为多线程程序

    单线程,所有程序依次执行,若多个任务同时执行,当一个任务执行完毕后再进行下一个任务执行

    多线程:多个任务可以同时执行

    多线程程序运行原理:

    分时调度:所有的线程轮流使用cpu,平均分配每个线程所占用的cpu的时间

    抢占式调度:先让优先级高的线程使用cpu如果优先级相同,则随机选择一个线程,java就使用的是抢占式调度

    多线程举例:360图:

    怎样创建多线程:

    我们需要创建一个子类去继承Thread类,并且重写Thread中的run方法,run方法中就写的是除了主线程之外的另一条线程所有执行的程序

    public class MyThread extends Thread{
    
    	@Override
    	public void run() {
    		//描述线程任务
    		for(int i=0;i<100;i++){
    			System.out.println(getName()+":"+i);
    		}
    	}
    }
    

      

    	public static void main(String[] args) {
    		//创建线程对象
    		MyThread my=new MyThread();
    		//开启线程
    		my.start();
    		//描述主线程任务
    		for(int i=0;i<100;i++){
    			System.out.println(Thread.currentThread().getName()+":"+i);
    		}
    	}
    

      其中thread类中的构造方法 一个是空参构造和有参构造,有参构造中可以传一个String参数来给线程起名字(但是一般情况下不用起名字)

    thread类中常用方法

    run()写该线程所需要执行的操作

    start()开启线程

    还有两个获取线程名字的方法

    (1)getName()返回该线程的名称,返回值类型是String

    (2)currentThread()是一个静态修饰的方法,返回当前线程对象再利用这个对象调用getname就能返回一个线程名称

    多线程代码内存图解

  • 相关阅读:
    WPF通过不透明蒙板切割显示子控件
    WPF图片,DataGrid等实现圆角
    今天是2015年1月5日
    控制反转&依赖注入
    如何提高sql查询性能到达优化程序的目的
    handle句柄
    winform加快窗体加载速度
    winform窗体自适应大小
    快速整理代码(c#)
    IC卡、ID卡、M1卡、射频卡的区别是什么(射频卡是种通信技术)
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14462664.html
Copyright © 2011-2022 走看看