java读取.properties文件及文件复制(通道)

来源:互联网 发布:密度泛函理论 软件 编辑:程序博客网 时间:2024/05/18 17:24


1、使用java.util.Properties类的load()方法 示例:

Java代码  收藏代码
  1. InputStream in = new BufferedInputStream(new FileInputStream(name));   
  2. Properties p = new Properties();   
  3. p.load(in); 
  4. in.close()   // 任何输入输出流都需要 .close()


2、使用java.util.ResourceBundle类的getBundle()方法
示例:
Java代码  收藏代码
  1. ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());   


用ResourceBundle读取.properties文件可避免路径问题
            我在jar里读取.properties文件时,总是找不到文件路径,后来用ResourceBundle读取.properties文件即可避免路径问题,代码如下:
    

//process为文件名,切记不要加 .properties, URL是文件里的键名
Java代码  收藏代码
  1.     ResourceBundle bundle = ResourceBundle.getBundle("com.ihandy.smsoc.app.process");  
  2.    String s = bundle.getString("URL");  
  3. System.out.println(s);  
  4. pURL = s;  



3、使用java.util.PropertyResourceBundle类的构造函数
示例:
Java代码  收藏代码
  1. InputStream in = new BufferedInputStream(new FileInputStream(name));   
  2. ResourceBundle rb = new PropertyResourceBundle(in);   


4、使用class变量的getResourceAsStream()方法
示例:

Java代码  收藏代码
  1. InputStream in = 类名.class.getResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   

5、使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法示例:
Java代码  收藏代码
  1. InputStream in = 类名.class.getClassLoader().getResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   


6、使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法示例:
Java代码  收藏代码
  1. InputStream in = ClassLoader.getSystemResourceAsStream(name);   
  2. Properties p = new Properties();   
  3. p.load(in);   


7、Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例:
Java代码  收藏代码
  1. InputStream in = context.getResourceAsStream(path);   
  2. Properties p = new Properties();   
  3. p.load(in);  


下面展示一个数据连接从properties文件中配置信息例子:

Java代码  收藏代码

             package com.web.connection;

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    public class Conn {
        private String fileName="/db.properties";//这里是指放在classes下,如果有包的话,前面加包名即可。例:/com/web/db.properties
        private String driver = "";
        private String url = "";
        private String username ="";
        private String password = "";
        Connection conn=null;
        

        public  Connection  getConn(){
            Properties p = new Properties();
            try {
                InputStream in = Conn.class.getResourceAsStream(fileName);//这里有人用new FileInputStream(fileName),不过这种方式找不到配置文件。有人说是在classes下,我调过了,不行。
                p.load(in);
                in.close();
                if(p.containsKey("driver")){
                    this.driver = p.getProperty("driver");
                }
                if(p.containsKey("url")){
                    this.url = p.getProperty("url");
                }
                if(p.containsKey("user")){
                    this.username = p.getProperty("user");
                }
                if(p.containsKey("password")){
                    this.password = p.getProperty("password");
                }
            } catch (IOException ex) {
                Logger.getLogger(Conn.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(p.getProperty("driver"));
           try {
                Class.forName(this.driver);
                conn = DriverManager.getConnection(this.url,this.username,this.password);
            } catch (SQLException ex) {
                ex.printStackTrace();
                System.out.print("获取连接异常");
            } catch (ClassNotFoundException ex) {
                System.out.print("加载驱动出错");
                ex.printStackTrace();;
            }
            return conn;
        }
    }
 

     一个从一个文件(inFile)copy到另一个文件(outFile)

第一种方案:

           File inFile= new File("***");

           File outFile= new File("***");

            BufferedInputStream  in  = new BufferedInputStream(new FileInputStream(inFile));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFile));
            int c;
            while ((c = in.read()) != -1)
               out.write(c);
            in.close();
            out.close();

 第二种方案:  使用快速通道  提高大文件复制的效率

  1. 用文件通道的方式来进行文件复制

        /**

        * 使用文件通道的方式复制文件

        * @param s          源文件

        * @param t         复制到的新文件

        */

        public void fileChannelCopy(File s, File t) {

            FileInputStream fi = null;

            FileOutputStream fo = null;

            FileChannel in = null;

            FileChannel out = null;

            try {

                fi = new FileInputStream(s);

                fo = new FileOutputStream(t);

                in = fi.getChannel();//得到对应的文件通道

                out = fo.getChannel();//得到对应的文件通道

                in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道

            } catch (IOException e) {

                e.printStackTrace();

            } finally {

                try {

                    fi.close();

                    in.close();

                    fo.close();

                    out.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

   //

通道跟缓存

读取文件

第一步是获取通道。我们从 FileInputStream 获取通道:

FileInputStream fin = new FileInputStream( "readandshow.txt" );FileChannel fc = fin.getChannel();

下一步是创建缓冲区:

ByteBuffer buffer = ByteBuffer.allocate( 1024 );

最后,需要将数据从通道读到缓冲区中,如下所示:

fc.read( buffer );

您会注意到,我们不需要告诉通道要读 多少数据 到缓冲区中。每一个缓冲区都有复杂的内部统计机制,它会跟踪已经读了多少数据以及还有多少空间可以容纳更多的数据。我们将在缓冲区内部细节 中介绍更多关于缓冲区统计机制的内容。

写入文件

在 NIO 中写入文件类似于从文件中读取。首先从 FileOutputStream 获取一个通道:

FileOutputStream fout = new FileOutputStream( "writesomebytes.txt" );FileChannel fc = fout.getChannel();

下一步是创建一个缓冲区并在其中放入一些数据 - 在这里,数据将从一个名为 message 的数组中取出,这个数组包含字符串 "Some bytes" 的 ASCII 字节(本教程后面将会解释buffer.flip()buffer.put() 调用)。

ByteBuffer buffer = ByteBuffer.allocate( 1024 );for (int i=0; i<message.length; ++i) {     buffer.put( message[i] );}buffer.flip();

最后一步是写入缓冲区中:

fc.write( buffer );

 


0 0