精华内容
下载资源
问答
  • Java文件读取 jar包内文件读取

    千次阅读 2016-11-16 17:33:17
    最近遇到一些Jar包内外配置文件读取的问题。索性自己测试总结一下,与大家分享。 主要是关于ClassLoader.getResource和Class.getResource方法路径区别的问题。 1. 绝对路径文件读取,最简单,最直接的方式 /**...

    最近遇到一些Jar包内外配置文件读取的问题。索性自己测试总结一下,与大家分享。

    主要是关于ClassLoader.getResource和Class.getResource方法路径区别的问题。

    1. 绝对路径文件读取,最简单,最直接的方式

    	/**
    	 * 从绝对路径读取文件,最基本的文件读取方式
    	 * 
    	 * @author lihzh
    	 * @data 2012-4-11 下午9:33:44
    	 */
    	@Test
    	public void testGetFileFromAbsolutePath() {
    		String dirPathNotUnderClasspath = "D:\\workspace-home\\JavaDemo\\conf";
    		File dirFile = new File(dirPathNotUnderClasspath);
    		AssertDirFile(dirFile);
    	}
    
       /**
    	 * 对文件夹类型文件的断言
    	 * 
    	 * @param dirFile
    	 * @author lihzh
    	 * @data 2012-4-11 下午9:49:14
    	 */
    	private void AssertDirFile(File dirFile) {
    		// 文件存在
    		Assert.assertTrue(dirFile.exists());
    		// 是绝对路径
    		Assert.assertTrue(dirFile.isAbsolute());
    		// 是个文件夹
    		Assert.assertTrue(dirFile.isDirectory());
    		// 获取文件夹下所有文件
    		File[] files = dirFile.listFiles();
    		// 下面有文件
    		Assert.assertNotNull(files);
    		// 且只有一个
    		Assert.assertEquals(1, files.length);
    		// 文件名匹配
    		Assert.assertEquals("test.properties", files[0].getName());
    	}
    

    2. 相对于执行编译命令路径的方式读取

    	/**
    	 * 从相对路径读取文件,相对于编译路径,在Eclipse中即为工程所在根目录。 本质还是绝对路径读取。
    	 * 
    	 * @author lihzh
    	 * @data 2012-4-11 下午9:51:10
    	 */
    	@Test
    	public void testGetFileFromRelativePath() {
    		String dirPath = System.getProperty("user.dir") + "\\conf";
    		File dirFile = new File(dirPath);
    		AssertDirFile(dirFile);
    	}
    

    3. 用URI构造本地文件读取

       /**
    	 * 构造URI/URL格式的文件路径,读取本地文件
    	 * 
    	 * @author lihzh
    	 * @throws URISyntaxException
    	 * @throws MalformedURLException
    	 * @data 2012-4-11 下午10:25:00
    	 */
    	@Test
    	public void testGetFileFromURIPath() throws URISyntaxException,
    			MalformedURLException {
    		// 直接用URI构造, 由于URI和URL可以互转,所以如果为URL直接用URL.toURI转换成URI即可
    		URI uri = new URI("file:/D:/workspace-home/JavaDemo/conf/");
    		File dirFile = new File(uri);
    		AssertDirFile(dirFile);
    	}
    

    特别说明:</span>用URI/URL的方式构造路径是个人比较推荐的,可以解决一些路径读取的问题。例如:Spring会对URI/URL格式的路径进行专有处理可以准确定位的位置,而直接使用绝对路径,在用Classpath和FileSystem两种不同的初始化方式下,可能会出现错误。

    4. 利用ClassLoader读取Jar包内部文件

       /**
    	 * 从依赖的Jar包中读取文件, Jar包内的文件是无法用File读取的,只能用Stream的方式读取。
    	 * 
    	 * @author lihzh
    	 * @throws URISyntaxException
    	 * @throws IOException
    	 * @data 2012-4-11 下午11:07:58
    	 */
    	@Test
    	public void testGetFileFromJarInClassPath() throws URISyntaxException,
    			IOException {
    		Enumeration<URL> urls = this.getClass().getClassLoader().getResources("conf/test.properties");
    		URL url = this.getClass().getClassLoader().getResource("conf/test.properties");
    		Assert.assertTrue(urls.hasMoreElements());
    		Assert.assertNotNull(url);
    		// 注意两种不同调用方式的路径的区别,此处如果不以'/' 开头,会被当作相对于当前类所在的包类处理,自然无法找到。
    		// 因为在Class的getResource方法的开头,有一个resolveName方法,处理了传入的路径格式问题。而ClassLoader类里的
    		// getResource和getResources均无此处理。使用时候需要用心。
    		URL clzURL = this.getClass().getResource("/conf/test.properties");
    		URL nullURL = this.getClass().getResource("conf/test.properties");
    		Assert.assertNotNull(clzURL);
    		Assert.assertNull(nullURL);
    		URL thisClzURL = this.getClass().getResource("");
    		Assert.assertNotNull(thisClzURL);
    		// 开始读取文件内容
    		InputStream is = this.getClass().getResourceAsStream("/conf/test.properties");
    		Properties props = new Properties();
    		props.load(is);
    		Assert.assertTrue(props.containsKey("test.key"));
    		Assert.assertEquals("thisIsValue", props.getProperty("test.key"));
    	}
    

    5. 读取Jar内某路径下的所有文件

    	/**
    	 * 从ClassPath中的Jar包读取某文件夹下的所有文件
    	 * 
    	 * @author lihzh
    	 * @throws IOException 
    	 * @data 2012-4-13 下午10:22:24
    	 */
    	@Test
    	public void testGetFilesFromJarInClassPathWithDirPath() throws IOException {
    		String dirPath = "conf/";
    		URL url = this.getClass().getClassLoader().getResource(dirPath);
    		Assert.assertNotNull(url);
    		String urlStr = url.toString();
    		// 找到!/ 截断之前的字符串
    		String jarPath = urlStr.substring(0, urlStr.indexOf("!/") + 2);
    		URL jarURL = new URL(jarPath);
    		JarURLConnection jarCon = (JarURLConnection) jarURL.openConnection();
    		JarFile jarFile = jarCon.getJarFile();
    		Enumeration<JarEntry> jarEntrys = jarFile.entries();
    		Assert.assertTrue(jarEntrys.hasMoreElements());
    		Properties props = new Properties();
    		while (jarEntrys.hasMoreElements()) {
    			JarEntry entry = jarEntrys.nextElement();
    			// 简单的判断路径,如果想做到像Spring,Ant-Style格式的路径匹配需要用到正则。
    			String name = entry.getName();
    			if (name.startsWith(dirPath) && !entry.isDirectory()) {
    				// 开始读取文件内容
    				InputStream is = this.getClass().getClassLoader().getResourceAsStream(name);
    				Assert.assertNotNull(is);
    				props.load(is);
    			}
    		}
    		Assert.assertTrue(props.containsKey("test.key"));
    		Assert.assertEquals("thisIsValue", props.getProperty("test.key"));
    		Assert.assertTrue(props.containsKey("test.key.two"));
    		Assert.assertEquals("thisIsAnotherValue", props.getProperty("test.key.two"));
    	}
    

    对于不在ClassPath下的Jar包的读取,当作一个本地文件用JarFile读取即可。路径可使用绝对路径。或者用上面的url.getConnection也可以处理。这里不再实现。 希望对你有所帮助。

    展开全文
  • java文件读取乱码

    千次阅读 2019-06-12 15:32:20
    https://nneverwei.iteye.com/blog/490884
    展开全文
  • java文件读取的两种方式FileReader

    万次阅读 2018-07-27 12:09:07
    示例代码一,文件读取的第一种方式,示例代码二,文件读取的第二种方式,第二种是常用的,必须会。 /* * 对文件的读取一共有两种方式,先介绍第一种读取方式 * 步骤: * 1.创建文件读取流对象,和指定名称的...

    示例代码一,文件读取的第一种方式,示例代码二,文件读取的第二种方式,第二种是常用的,必须会。

    /*
     * 对文件的读取一共有两种方式,先介绍第一种读取方式
     * 步骤:
     * 1.创建文件读取流对象,和指定名称的文件相关联,如果不存在指定文件的话,发生FileNotFoundException。
     * 2.调用read方法,由于read一次只读一个字符,所以要用while循环。
     * 3.关闭资源块。
     */
    import java.io.*;
    public class Zifureader {
    
    	public static void main(String[] args) 
    	{
    		FileReader fr=null;
    		try
    		{
    			fr=new FileReader("D:\\javatest\\test.txt");
    			int ch=0;
    			while((ch=fr.read())!=-1) //记住即可,read方法如果没有可读取的了,则返回-1,所以就是一直读取,并将
    				                      //读取的内容存入ch,一直到结尾
    			{
    				System.out.print((char)ch);//打印读取的结果,由于ch是int类型,将其强制转换为String类型
    			}
    		}
    		catch(IOException e) 
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				if(fr!=null) 
    				{
    					fr.close();
    				}
    			}
    			catch(IOException e) 
    			{
    				System.out.println(e.toString());
    			}
    		}
    				
    	}
    
    }
    
    /*
     * 文件读取的第二种方式:通过字符数组进行读取
     * 步骤和第一种基本相似,但其中就是多创建一个字符数组
     */
    import java.io.*;
    public class Zifureader1 {
    	public static void main(String[] args)
    	{
    		FileReader fr=null;
    		try
    		{
    			fr=new FileReader("D:\\javatest\\test.txt");
    			char[] buf=new char[1024];
    			//read(char [])返回读到的字符个数
    			int num=0;
    			while((num=fr.read(buf))!=-1) //读取文件并把它存入buf中,用num返回读到字符的个数,一直读到结尾
    			{
    				System.out.print((new String(buf,0,num)));//字符数组里仍有空白没有读入的位置,所以不要了
    													      //new String(字符串,开始位置,结尾位置)
    			}
    		}
    		catch(IOException e) 
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				if(fr!=null) 
    				{
    					fr.close();
    				}
    			}
    			catch(IOException e) 
    			{
    				System.out.println(e.toString());
    			}
    		}
    	}
    
    }
    

     

    展开全文
  • Java文件读取,写入数据库

    千次阅读 2017-11-25 11:48:46
     * 文件读写及数据入库工具包  */ package com.xxx.file; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io....
    /**
     * 文件读写及数据入库工具包
     */
    package com.xxx.file;


    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;


    /**
     * @author QZ_ba
     * 文件读取类
     */
    public class ReadFile3 {
    //创建数据库连接
    static Connection con = null;
    //创建预编译语句对象
    static Statement pstmt = null;
    //创建一个结果集
    static ResultSet result = null;
    /**
    * 初始化数据库连接驱动
    */
    private void initJdbc(){
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序
    String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";              //数据库连接信息
    String user = "admin1001"; //数据库用户名
    String pass = "admin1001"; //数据库密码
    con = DriverManager.getConnection(url, user, pass); //获取连接
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    /**
    * 文件读取操作
    * @param fileName 文件名(全路径名称)
    * @throws IOException 
    */
    private void readFile(String fileName) throws IOException{
    BufferedReader in = new BufferedReader(new FileReader(fileName)); //阅读器
       String line; //行数据
       String tbName = null; //标签名--数据库表名
       String[] cols = null; //标签列名--数据库列名
       String[] vals = null; //标签列值--数据库列值


       List<String> inserList = new ArrayList<String>(); //插入语句集合
       List<String> tbList = new ArrayList<String>();                   //表名集合
       List<String[]> colSz = new ArrayList<String[]>(); //列名数组集合
       PrintWriter out = new PrintWriter(new FileWriter("F:/test/insert.txt"));//
       try {
       while(null!=(line = in.readLine())){
        if(line.startsWith("<") && !line.startsWith("<!") && !line.startsWith("</")){//解析表名--以"<"开头,且不以"<!"和"</"开头
        tbName = line.substring(line.indexOf("<") + 1, line.indexOf(":"));//从"<"开始截取到第一个":"
        tbList.add(tbName);
        }else if(line.startsWith("@")){//解析列名
        cols = line.replaceAll("@", "").split("\\s{2,}|\t");//替换掉开头"@",按多空格或Tab键分组截取,获得列名数组
        colSz.add(cols);
        }else if(line.startsWith("#")){//解析数据
        vals = line.split("\\s{2,}|\t");//按多空格或Tab键分组截取,获得数据数组
        String ists = null;         //插入数据SQL
    ists = "INSERT INTO " + tbName + "_TEST(";
    for (int i = 0; i < cols.length; i++) {
    ists += cols[i] + ",";
    }
    ists = ists.substring(0, ists.length() - 1);
    ists += ") VALUES(";
    String val = "";
    for (int i = 1; i < vals.length; i++) {
    if(!"NULL".equals(vals[i])){
    val = vals[i];
    }
    ists += "'" + val + "',";
    val = "";
    }
    ists = ists.substring(0, ists.length() - 1);
    ists += ")";
    inserList.add(ists);

        }else{//此处出现列值中有换行的现象,需要做特殊处理
        //若无插入语句,跳出当前循环,继续执行下次循环
        if(null == inserList || inserList.size() == 0) continue;
        if(line.startsWith("//")) continue;
        /* 将出现换行的行按多空格或制表符进行分割 并将其数组值插入上一行插入语句的valus后 */
        String[] hxStr = line.split("\\s{2,}|\t");
        String insertStr = inserList.get(inserList.size() - 1).replace(")", "");//获取上一行插入语句,并将结尾处的)替换为空
        for (int i = 0; i < hxStr.length; i++) {
        insertStr += ",'" + hxStr[i] + "'";//追加换行数据切割后的每一个值
    }
        insertStr += ")";//将values最后追加),插入语句完整 
        inserList.remove(inserList.size() - 1);//删除上一行插入语句
        inserList.add(insertStr);              //将新的插入语句插入到list中
        }
       }
       for (String str : inserList) {
        out.write(str + ";");
    out.println();
    }
       out.flush();
       System.out.println("数据插入语句写完毕!");
       
        createTables(tbList,colSz);
    insertData(inserList);
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    try {
    if(null != out) out.close();
    } catch (Exception e2) {
    e2.printStackTrace();
    }
    }
    }
    /**
    * 建表操作
    * @param createList
    */
    private void createTables(List<String> tbName,List<String[]> col) {
    try {
    pstmt = con.createStatement();
    int tlen = tbName.size();   //表个数
    int clen = 0;               //列个数
    String[] cols = {};         //列名数组
    String createSql = "";
    String tname = "";
    List<String> clist = new ArrayList<String>();
    PrintWriter out = new PrintWriter(new FileWriter("F:/test/create.txt"));
    for (int i = 0; i < tlen; i++) {
    tname = tbName.get(i);
    cols = col.get(i);
    clen = cols.length;
    createSql = "CREATE TABLE "+tname+"_TEST(";
    for (int j = 0; j < clen; j++) {
    createSql +=  cols[j] + " VARCHAR2(1000),";
    }
    createSql = createSql.substring(0, createSql.length() - 1) + ")";
    out.write(createSql);
    out.println();
    clist.add(createSql);
    pstmt.addBatch(createSql);
    }
    out.flush();
    pstmt.executeBatch();
    try {
    if (null != out) {
    out.close();
    }
    } catch (Exception e2) {
    e2.printStackTrace();
    }
    System.out.println("建表完毕!");
    } catch (Exception e) {
    e.printStackTrace();
    }finally{

    }

    }
    /**
    * 数据入库操作
    * @throws ClassNotFoundException 
    * @throws SQLException 
    */
    private void insertData(List<String> inserList) throws ClassNotFoundException{
    try{
    pstmt = con.createStatement();
    System.out.println("数据条数:" + inserList.size());
    for (String string : inserList) {
    pstmt.addBatch(string);
    }
    pstmt.executeBatch();
    }catch (Exception e) {
    e.printStackTrace();
    }finally{

    }
    }

    /**
    * @param args
    */
    public static void main(String[] args) {
    ReadFile3 rd = new ReadFile3();
    try {
    rd.initJdbc();
    long begin = System.currentTimeMillis();
    System.out.println("数据插入准备!开始时间为:" + begin);
    rd.readFile("F:/123.CIME");
    long end = System.currentTimeMillis();
    System.out.println("数据插入完毕!结束时间为:" + end);
    try {
    if(null != pstmt){
    pstmt.close();
    }
    if(null != con){
    con.close();
    }
    } catch (Exception e2) {
    }
    long mills = (end - begin) / 1000 / 60 ;
    System.out.println("耗时约:" + mills + "分钟!");
    } catch (Exception e) {
    e.printStackTrace();
    }


    }


    }
    展开全文
  • JAVA文件读取和写入(内附简单的代码实现)

    万次阅读 多人点赞 2018-07-17 15:36:18
    然后由于文件读取和写入格式的复杂性,导致JAVA中有很多不同功能的类,它们各自对应着不同的读/写格式。今天我们将简单介绍一下JAVA中文件处理类的继承关系,并提供一个简单的解决方案。后期我会另外再写一篇博客来...
  • java文件读取写出乱码问题解决

    千次阅读 热门讨论 2016-12-13 15:46:31
    开发eclipse插件(RCP程序)的时候,有一个操作是从在插件中,读取java文件(utf-8编码),然后显示到JtextArea中,奇怪的是,虽然设置了插件工程是utf-8编码,显示到JTextArea的中文仍然是乱码,经过检查才发现,...
  • Java 文件读取的异常处理

    千次阅读 2014-05-08 11:09:26
    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TestReadFile { public static void main(String[] args) { FileReader fr = null; try {
  • java 文件读取,一行一行的读取

    千次阅读 2014-12-18 15:33:38
    主要解决的问题是:把文件中的有对应格式的字符串,转换成json字符串的文件 核心代码: String readoneline = null; while((readoneline = br.readLine()) != null){ String[] lines = readoneline....
  • 报这个错误是路径写的不对,java代码里写的路径和从配置文件里取得路径是不一样的,不需要 "//"进行编译
  • java文件读取 编码方式设置

    千次阅读 2008-09-10 10:12:33
    java"]FileInputStream fr = new FileInputStream(path); InputStreamReader is = new InputStreamReader(fr,"UTF-8"); BufferedReader br=new BufferedReader(is);[/code] [code="...
  • 使用java读取jar或war下的配置文件,是开发者经常需要处理的事情,大家是不是经常遇到FileNotFoundException呢?java读取文件的方式也有很多,比如new File(),Class.getResource(),ClassLoader.getResource(),这些...
  • /*  A class containing methods useful for manipulating  text files  1....  reads the contents of a text file line by line ... and returns a String array representation,...
  • Java读取txt文件和写入txt文件

    万次阅读 多人点赞 2016-05-25 23:16:26
    原文: Java读取txt文件和写入txt文件Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂! package edu.thu.keyword.test; ...
  • java读取文件

    千次阅读 2016-12-29 15:56:51
    java读取文件 以字节为单位读取文件 以字符为单位读取文件 以行为单位读取文件 随机读取文件内容 ReadFromFile.javapackage cn.zhisheng.io;import java.io.*;/** * java读取文件 * Created by 10412 on 2016/12/...
  • Java读取文件

    万次阅读 2019-06-04 16:30:13
    Java读取文件 本文是基于Windows 10系统环境,学习和实现Java读取文件: Windows 10 MyEclipse 10 一、Java读取文件 (1) 代码实现 java代码 public class Demo(){ File file = new File("e:/a.txt"); //读取...
  • Java Inputstream读取文件乱码问题

    万次阅读 2018-04-21 21:18:58
    今天突然突发奇想,想来操作下Java文件读取(不得不说以前自己都很懒,能百度的东西自己都不愿意自己亲手去做,希望广大码友不要学我,凡事自己多实践)这篇文章主要记录自己在使用Inputstream遇到问题(乱码和字节...
  • Java实现读取csv文件

    万次阅读 热门讨论 2019-07-26 23:06:52
    JAVA读取CSV数据
  • java快速读取文件

    千次阅读 2017-07-08 18:04:15
    java读取文件的方式有多种,有些慢,有些快,当读取大量的文件时,速度尤为重要。以下是鄙人做项目时发现读取文件过慢时,对两种读取文件方式快慢的测试。 开门见山:这是快速读取的代码: static public String ...
  • Java 读取文件

    千次阅读 2018-12-07 17:17:13
    JAVA有多种读取文件的方式,其中比较深层次的原理在我的另外一篇文章分析过:JDK核心JAVA源码解析(5) - JAVA File MMAP原理解析,那么,我们有哪些方式去读取一个文件的内容呢? 1. 从ClassPath中读取文件 直接从...
  • Java高效读取文件

    千次阅读 2017-11-28 23:27:04
    java读取文件
  • java——读取JSON文件

    万次阅读 2017-05-08 21:38:21
    我们拿到 JSON 文件,若想通过 java 读取其中的数据,该怎么做呢? 就搜索些视频、博客看了一下,这里整理一番。读前需要了解 java-IO 基础知识 java-File了解 推荐一篇博文:使用FileUtils简化你的文件操作 首先我...
  • package read;import java.io.BufferedReader;import java.io.File;...public class read {/*** 读取txt文件的内容* @param file 想要读取文件对象* @return 返回文件内容*/public static String txt2String(File...
  • Java文件读取

    千次阅读 2019-03-18 17:39:04
    1.内存读取 import com.google.common.io.Files; import org.apache.commons.io.Charsets; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import java.io.File; import java.io....
  • 这个并不困难,大概的步骤是这样的:TXT是一个文本文件,一般采用流的方式读取java提供了一个FileInputStream,我们可以直接以文件路径构造这个流,也可以以文件对象构造他,如:FileInputStream fin = new ...
  • Java 读取文本文件

    万次阅读 多人点赞 2018-08-29 14:22:14
    File Path FileReader 和 FileWriter InputStreamReader 和 OutputStreamWriter ...File 代表目录或者文件 File类的实例是不可变的;也就是说,一旦创建,由File对象表示的抽象路径名将永远不会改变。下面...
  • java逐行读取超大文件

    千次阅读 2020-01-19 10:43:38
    之前写了一个读取超大json文件的封装,但是有些情况需要逐行读取文件,这里提供逐行读取超大文件的封装,读取大json文件请点击传送门 代码中写了详细的注释这里就不详细介绍了直接上代码(代码为参考...
  • 今天在写java程序的时候遇到一个奇怪的问题,当我用程序去读取文件时,程序不断提示文件不存在,并抛出Exception in thread "main" java.io.FileNotFoundException (文件不存在)异常。当我在控制台...
  • java读取excel文件

    万次阅读 2017-04-12 10:56:24
    java读取excel文件
  • Java 后台读取文件

    千次阅读 2018-06-07 13:55:41
    //读取文件public static void main(String[] args) throws Exception { /*FileInputStream fis = new FileInputStream("C:/log2222.txt"); int length; byte[] bytes = new byte[1024]; while ((le.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,827
精华内容 23,930
关键字:

java文件读取

java 订阅