重新认识Java-I/O流
Posted sjjava
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重新认识Java-I/O流相关的知识,希望对你有一定的参考价值。
记录一下在工作中遇到的一些有意思的问题,在之前系统学习过Java的IO流,但是在工作中长时间没有用到导致在这几天的一个需求中抓瞎了,查了好一会的资料耽误了一段时间,好了废话不多说,下面简单讲一下需求。
需求是这样的,数据库中有一张数据表的一个BLOB字段中存放了一个excel文件,我需要将这个文件放到服务器指定的文件夹下面。思路是这样的:1、在指定文件夹下面创建excel文件。2、jdbc取出数据库中的文件。3、各自转换为输入输出流将数据库中的文件数据导入到指定文件内。下面是代码:
package helloTest; import com.fr.base.FRContext; import com.fr.data.AbstractTableData; import com.fr.general.data.TableDataException; import com.fr.third.org.apache.poi.hssf.usermodel.HSSFSheet; import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class ReadFile { private static PreparedStatement ps; /** * 读取保存在数据库中的文件到指定服务器文件夹下的文件 * @auther SunJ 20190912 * @param id * @return java.io.File */ public File getFile(String id){ String sql = " select filedata from credit.filedata where id = ? "; FRContext.getLogger().info("Query SQL of ParamTableDataDemo: " + sql); Connection conn = getConnection(); File file = new File("D:\root\EFS\data.xls"); try { OutputStream outputStream = new FileOutputStream(file); ps = conn.prepareStatement(sql); ps.setString(1, id); ResultSet rs = ps.executeQuery(); InputStream in = null;//文件数据输入流 while (rs.next()) { in = rs.getBlob(1).getBinaryStream(); } byte[] b = new byte[1024]; int len = 0; while ( (len = in.read(b)) != -1) { outputStream.write(b, 0, len);//数据写入指定文件内 } outputStream.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } return file; } /** * 读取服务器文件。 * @auther SunJ 20190912 * @return boolean */ public boolean inputDataToDb(String filePath){ filePath = "D:\root\EFS\data.xls"; try { InputStream is = new FileInputStream(filePath); HSSFWorkbook excel = new HSSFWorkbook(is); for (int numSheet = 0; numSheet < excel.getNumberOfSheets(); numSheet++) { HSSFSheet sheet = excel.getSheetAt(numSheet); } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 建立数据库连接 * @auther SunJ 20190912 * @return java.sql.Connection */ public Connection getConnection() { String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@10.116.50.123:1521/test"; String username = ""; String password = ""; Connection con; try { Class.forName(driverName); con = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); return null; } return con; } public static void main(String[] args) { ReadFile ReadFile = new ReadFile(); File file = ReadFile.getFile("b3448e077f3f4b229f30a86c604e23ab"); System.out.println(file); } }
以上是关于重新认识Java-I/O流的主要内容,如果未能解决你的问题,请参考以下文章
java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段
java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段