java字符读写文件(Writer,Reader)

合集下载

Java语言程序设计7-1-java第7章(文件数据流)

Java语言程序设计7-1-java第7章(文件数据流)
例题的执行结果
在屏幕上显示文字时需要注意的事项: 在屏幕上显示文字时需要注意的事项: FileReader.read()函数返回整型数,显示时必 函数返回整型数, 函数返回整型数 须把它强制转换成字符类型 如果不转换,显示结果如下: 如果不转换,显示结果如下:
软件学院
7.1 写入和读出数据文件
二进制数据文件的读写
DataInputStream in1 = new DataInputStream(file1); DataOutputStream out1 = new DataOutputStream(file2);
软件学院
7.1 写入和读出数据文件
3.用DataInputStream类读出数据 用 类读出数据
FileInputStream file1 = new FileInputStream("save1.dat"); FileOutputStream file2 = new FileOutputStream("save2.dat");
软件学院
7.1 写入和读出数据文件
2.创建文件读写对象 创建文件读写对象
while (aChar != '\u0000') { str.append(aChar); aChar = in1.readChar(); }
软件学院
7.1 写入和读出数据文件
5.关闭文件 关闭文件
在读取或写入文件之后, 在读取或写入文件之后,同样应当调用文件读写对 象的close函数关闭文件 象的 函数关闭文件 在写入文件时,内容往往只写在缓存里, 在写入文件时,内容往往只写在缓存里,只有在关 闭文件时才会真正将内容写入 关闭文件的代码如下: 关闭文件的代码如下:

JavaIO:读写zip文件

JavaIO:读写zip文件

JavaIO:读写zip⽂件ZipInputStream是⼀种FilterInputStream,它可以直接读取zip包的内容:读取zip包ZipInputStream的基本⽤法我们要创建⼀个ZipInputStream,通常是传⼊⼀个FileInputStream作为数据源,然后,循环调⽤getNextEntry(),直到返回null,表⽰zip流结束。

⼀个ZipEntry表⽰⼀个压缩⽂件或⽬录,如果是压缩⽂件,我们就⽤read()⽅法不断读取,直到返回-1:try (ZipInputStream zip = new ZipInputStream(new FileInputStream(...))) {ZipEntry entry = null;while ((entry = zip.getNextEntry()) != null) {String name = entry.getName();if (!entry.isDirectory()) {int n;while ((n = zip.read()) != -1) {...}}}}写⼊zip包ZipOutputStream是⼀种FilterOutputStream,它可以直接写⼊内容到zip包。

我们要先创建⼀个ZipOutputStream,通常是包装⼀个FileOutputStream,然后,每写⼊⼀个⽂件前,先调⽤putNextEntry(),然后⽤write()写⼊byte[]数据,写⼊完毕后调⽤closeEntry()结束这个⽂件的打包。

try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(...))) {File[] files = ...for (File file : files) {zip.putNextEntry(new ZipEntry(file.getName()));zip.write(getFileDataAsBytes(file));zip.closeEntry();}}上⾯的代码没有考虑⽂件的⽬录结构。

(完整版)5Java第五单元练习题-输入流与输出流

(完整版)5Java第五单元练习题-输入流与输出流

5 Java 输入流与输出流5.1 单项选择题1.实现字符流的写操作类是( A . FileReader B . Writer C)。

. FileInputStream D. FileOutputStream2. 实现字符流的读操作类是( )。

A . FileReaderB . WriterC . FileInputStreamD . FileOutputStream3.凡是从中央处理器流向外部设备的数据流称为() A. 文件流 B. 字符流 C. 输入流 D. 输出流4.构造 BufferedInputStream 的合适参数是哪一个?( ) A . FileInputStream B . BufferedOutputStreamC . FileD . FileOuterStream5.在编写 Java Application 程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。

D . import java.awt.Graphics ;6.下列流中哪个不属于字符流?( A . InputStreamReaderC . FilterReader 7.流的传递方式是() A. 并行的B. 串行的C. 并行和串行D. 以上都不对8.字符流与字节流的区别在于( )A. 前者带有缓冲,后者没有B. 前者是块读写,后者是字节读写C. 二者没有区别,可以互换使用A . import java.awt.* ;B import java.applet.Applet ;C . import java.io.* ; )B . BufferedReaderD . FileInputStream2D. 每次读写的字节数不同9.下列流中哪个不属于字节流 A . FileInputStream B . BufferedInputStream C. FilterInputStream D. InputStreamReader10.如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象()A . FileInputStreamB . FileOutputStreamC . DataOutputStreamD . FileWriter11. 下列哪一个 import 命令可以使我们在程序中创建输入/ 输出流对象()A .import java.sql.*;B . import java.util.*;C . import java.io.*;D . import .*;12.下面的程序段创建了 BufferedReader 类的对象in ,以便读取本机 c 盘my 文件夹下的文件 1.txt 。

JAVA输入输出流

JAVA输入输出流
三个基本的read方法:
int read() int read(byte[] buffer) int read(byte[] buffer, int offset, int length)
其它方法:
void close() int available() skip(long n) boolean markSupported() void mark(int readlimit) void reset()
9.4常用输入输出流类(2)
FileReader-文件字符输入流
构造方法: public FileReader(String name) throws FileNotFoundException public FileReader(File file) throws FileNotFoundException
方法:参见InputStream FileOutputStream-文件字节输出流
构造方法: public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(File file) throws FileNotFoundException 方法:参见OutputStream
//标准输出流System.out是字节输出流
//把标准输出流转化成缓冲字节输出流 /用BufferedOutputStream中函数Write输出 //数据从缓冲区中全部输出
import java.io.*; public class Test3 { public static void main(String[] args) throws IOException{ String s = "Hello"; OutputStreamWriter o = new OutputStreamWriter(System.out); o.write(s); 把标准字节输出流转化 成字符输出流 o.flush(); } }

Java的RandomAccessFile对文件内容进行读写

Java的RandomAccessFile对文件内容进行读写

Java的RandomAccessFile对⽂件内容进⾏读写RandomAccessFile是Java提供的对⽂件内容的访问,她既可以读⽂件,也可以写⽂件,并且RandomAccessFile⽀持随机访问⽂件,也就是说他可以指定位置进⾏访问。

我们知道Java的⽂件模型,⽂件硬盘上的⽂件是byte byte byte的字节进⾏存储的,是数据的集合。

下⾯就是⽤这个类的步骤。

(1)打开指定的⽂件,有两种模式“rw”(读写) “r”(只读),创建对象,并且指定file和模式,例如:RandomAccessFile ac=new RandomAccessFile(file,”rw”);因为它⽀持随机访问⽂件,所以他引⼊了指针,可以通过指针来写⼊写出在指定的位置。

⽂件指针,打开⽂件时指针在开头pointer=0 (2)RandomAccessFile的往⽂件中写的⽅法(还有其他的写⽅法)Ac.write(int)----->只能写⼀个字节(后⼋位),同时⽂件指针也会移动,指向下⼀个位置。

(3)RandomAccessFile读的⽅法(还有其他的读⽅法)int b=ac.read()--->读⼀个字节(4)⽂件读写完毕后必须要把他关闭,调⽤close()的⽅法。

下⾯就是例⼦://创建相对路径的⽂件,就是在这个项⽬中创建⼀个⽂件夹File file=new File("random");if(!file.exists()) {file.mkdir();}File fileName=new File(file,"javaio.txt");if(!fileName.exists()) {fileName.createNewFile();//创建⽂件}//创建⼀个RandomAccessFile的对象,并指定模式rw,能读能写,//注意:必须是⽂件,不能是路径RandomAccessFile raf=new RandomAccessFile(fileName,"rw");//获取此时的⽂件指针的位置,起始位置为0System.out.println(raf.getFilePointer());//向⽂件中写⼊字符A,字符类型有两个字节,但她写⼊的是后⼋位的字节//字符A正好可以⽤后⼋位的字节表⽰出来raf.write('A');//字符的位置会⾃动向后移动,⽂件指针会向后⾃动移动System.out.println("输⼊⼀个字符之后,⽂件指针的位置"+raf.getFilePointer());raf.write('B');//每次write只能写⼊⼀个字节,如果要把i写进去,就需要写四次int i=0x7fffffff;raf.write(i>>>24 & 0xff);//写⼊⾼⼋位的raf.write(i>>>16 & 0xff);raf.write(i>>>8 & 0xff);raf.write(i);//写⼊低⼋位System.out.println("写⼊整数的时候⽂件指针的位置是"+raf.getFilePointer());/*** writeInt()的内置⽅法* public final void writeInt(int v) throws IOException {write((v >>> 24) & 0xFF);write((v >>> 16) & 0xFF);write((v >>> 8) & 0xFF);write((v >>> 0) & 0xFF);//written += 4;}*///也可以直接写⼊int整数raf.writeInt(i);//写⼊⼀个汉字,汉字为两个字节String str="欢迎学习java";byte[] b=str.getBytes("gbk");raf.write(b);System.out.println("此时的长度为"+raf.length());//读⽂件必须将⽂件指针放在开头位置raf.seek(0);byte[] buf=new byte[(int)raf.length()];raf.read(buf);//将内容写⼊buf字节数组中String str1=new String(buf,"gbk");System.out.println("⽂件中的内容为"+str1); raf.close();。

(完整版)5Java第五单元练习题-输入流与输出流

(完整版)5Java第五单元练习题-输入流与输出流

5 Java 输入流与输出流 5.1单项选择题 1.实现字符流的写操作类是 (A . FileReader B . Writer C )。

File In putStreamDFileOutputStream 2.实现字符流的读操作类是() A . FileReader B . Writer C . 3 .凡是从中央处理器流向外部设备的数据流称为File In putStream D()FileOutputStream A. 文件流B. 字符流C. 输入流D. 输出流4 .构造 BufferedInputStream 的合适参数是哪一个?( )A . FileI nputStreamB . BufferedOutputStreamC . FileD . FileOuterStream5.在编写Java Application 程序时,若需要使用到标准输入输出语句,头写上()语句。

A . import java.awt.* ; B import java.applet.Applet ;C . import java.io.* ;D . import java.awt.Graphics ;必须在程序的开6 . 下列流中哪个不属于字符流?( )A . In putStreamReaderB . BufferedReadeC . FilterReader 7 .流的传递方式是() rA. 并行的 D . File InputStreamB. 串行的C. 并行和串行D. 以上都不对8.字符流与字节流的区别在于()A. 前者带有缓冲,后者没有B. 前者是块读写,后者是字节读写C. 二者没有区别,可以互换使用D. 每次读写的字节数不同9.下列流中哪个不属于字节流A . FileInputStreamB . BufferedInputStream C. FilterInputStreamD. InputStreamReader10 .如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象( ) A . FileInputStream B . C . DataOutputStream D . FileOutputStreamFileWriter11. 下列哪一个 import 命令可以使我们在程序中创建输入/ 输出流对象 ()12. 下面的程序段创建了 BufferedReader 类的对象 in ,以便读取本机 c 盘 my 文件夹下的文 件 1.txt 。

计算机等级考试二级Java重要知识点实用1份

计算机等级考试二级Java重要知识点实用1份计算机等级考试二级Java重要知识点 1计算机等级考试二级Java重要知识点1.栈:先进后出。

栈是限定在表的一端进行插入和删除操作的线性表,允许插入和删除的一端叫做“栈顶”,不允许插入和删除的一端叫做“栈底”。

2. 队列:先进先出。

3. 根据数据结构中各数据元素之间的复杂程度,将数据结构分为线性结构与非线性结构两类。

4. 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。

5. 循环队列中元素的个数是由队头指针和队尾指针共同决定,动态变化也是通过队头与队尾指针来反应。

6. 二分查找,最坏情况下需要比较的次数是O(log2n)。

7. 顺序存储结构的存储一定是连接的,链式存储结构的存储空间不一定是连接的。

8. 在软件开发中,需求分析阶段常使用的工具是数据流图(DFD)、数据字典(DD)、判断树和判断表。

9. 在数据管理技术发展的三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段中,数据共享最好的是数据库系统阶段。

10. 在实际应用中,最常用的连接是一个叫自然连接的特例。

它满足下面的条件:两关系间有公共域,通过公共域的相等值进行连接。

11. Java语言的垃圾回收机制的一项是内存跟踪。

12. 不使用保留字可以使用只有在定义该类的包中的其他类才能访问该类。

13. 表达式中正确的是x++或++x,不能对表达式和数字运用自增与自减。

14. 在Java中所有类的根类是ng.Object。

15. 在Java中,用package语句说明一个包时,该包的层次结构必须是与文件目录的层次相同。

16. 在读字符文件时,使用该文件作为参数的类是FileInputStream。

Buffered__是处理缓冲流,只为提速,不处理文件流。

Data__类是处理字节流的。

17. 构造方法的调用方式中,只能通过new自动调用。

18. FlowLayout是Panel和Applet默认的布局管理器,构件在容器中从上到下,从左到右进行放置。

6.8字符流实现txt文件复制

第二步:创建读写缓冲区char[] 第三步:使用Reader对象的read()方法将text.txt文件内容读取到缓冲区中。 第四步:使用Writer对象的write()方法将缓冲区的写内容到textcopy.txt文件
里。 第五步:使用Reader和Writer对象各自的close()方法关闭流
字符流文件复制
01
字符流实现txt文件复制
字符流实现txt文件复制
【例】使用字符流复制一个text.txt文件,复制后名称为textcopy.txt
字符流实现txt文件复制
【例】使用字符流复制一个text.txt文件,复制后名称为textcopy.txt
字符流实现txt文件复制
【例】复制功能的实现思路如下:
第一步:使用InputStreamReader将text.txt文件以UTF-8编码初始化 为Reader对象,使用OutputStreamWriter初始化为Writer对象,设置 其输出编码为UTF-8
第二步:使用Reader对象的read()方法读取text.txt文件内容 第三步:使用Writer对象的write()方法将读取到的内容写入
}
字符流实现txt文件复制
【例】copyByBuffer()方法执行结果如图所示:
感谢聆听
THANK
S
石家庄科技工程职业学院软件技术专业群教学资源库
fw.close();
System.out.println("流全部关闭");
} catch (IOException e) {
e.printStackTrace();}
}
}
字符流实现txt文件复制
【例】使用字符流实现文件的复制:

java读写yml文件,修改文件内容保持原格式

java读写yml⽂件,修改⽂件内容保持原格式我理解的yml⽂件在我们学习过springboot项⽬的同学对这个⽂件肯定是特别熟悉,通常我们都是⽤它来修改保存我们的项⽬配置,最简单的就是数据库的配置,然后就是资源读取配置,redies配置,缓存配置,以及jwt的配置等等,因为yml⽂件主要⽤于我们的项⽬配置,所以⼀个特点就是易于⼈们阅读,修改;即使⼀个刚接触yml⽂件的⼈加上简单的注释,肯定也能够看懂打部分内容的;我总结的特点就是:1. 直观,易于阅读,修改2. 可以把对象的层次结构展现得很直观3. ⽤key:value的⽅式属性4. ⽤空格数量表⽰层级关系我⼯作中遇到的问题⼤家估计在spring中主要都是读取yml⽂件,所以对于写yml⽂件的过程经历不太多,我的项⽬系统是⾃⼰的java框架,然后要集成另外的⼀个spring项⽬,当我的项⽬修改数据库信息的时候同时也要修改这个springboot项⽬的数据库配置信息,那么就存在⼀个对yml的读和写的过程,我经过百度后加上⾃⼰的代码,就得到了⾃⼰想要的效果;主要⽤到了ymal这个开源⼯具类;maven依赖<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.25</version></dependency>读取关键代码,ymal⼯具⾃动将yml⽂件转换为map结构的对象//解析yml⽂件的关键类Yaml yml =null;try (FileInputStream in = new FileInputStream(file)){yml = new Yaml();obj = (Map)yml.load(in);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Map<String,Object> springMap =(Map)obj.get("spring");写⼊关键代码,try (FileWriter writer = new FileWriter(file)) {//writer.write(yml.dump(obj));writer.write(yml.dumpAsMap(obj));//writer.write(yml.dumpAs(obj, Tag.MAP, DumperOptions.FlowStyle.BLOCK));//可以⾃定义写⼊格式//writer.write(yml.dumpAs(obj, Tag.MAP, DumperOptions.FlowStyle.FLOW));} catch (IOException e) {e.printStackTrace();}我⽤的是dumpAsMap⽅法,这个⽅法能够⾃动把map结构的对象转为yml⽂件的key:value的结构,map层级⽤两个空格表⽰,但是我的这个项⽬⽤了4个空格,所以后⾯我还得重新特殊处理⼀下;完整代码,因为我的主要⽬的是修改数据库配置信息,由于项⽬系统⽀持了很多类型的数据库,所以我要适配各种数据库;@SpringBootTestpublic class DemoTest {@Testpublic void readYmlTest() {//要读的⽂件路径String filePath ="C:"+File.separator+"Users"+File.separator+"17247"+File.separator+"Desktop"+File.separator+"application-exclusive.yml";Map<String,Object> obj =null;File file = new File(filePath);//解析yml⽂件的关键类Yaml yml =null;try (FileInputStream in = new FileInputStream(file)){yml = new Yaml();obj = (Map)yml.load(in);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Map<String,Object> springMap =(Map)obj.get("spring");String url = "jdbc:oracle:thin:@127.0.0.1:1521/orcl";//String url = "jdbc:dm://127.0.0.1:5236/DMSERVER?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8"; String usesrname = "poc";String pwd = "ENC(w2PXuzg+U60Zs2MA/FouyQ==)";AEDatasourceFactory AeDatasourceFactory = new AEDatasourceFactory(url,usesrname,pwd);//根据不同数据库更新模板AeDatasourceFactory.updateDatasourceTemplet(springMap);try (FileWriter writer = new FileWriter(file)) {//writer.write(yml.dump(obj));//writer.write(yml.dumpAsMap(obj));writer.write(yml.dumpAs(obj, Tag.MAP, DumperOptions.FlowStyle.BLOCK));//writer.write(yml.dumpAs(obj, Tag.MAP, DumperOptions.FlowStyle.BLOCK));} catch (IOException e) {e.printStackTrace();}//重新读取⽂件调整空格StringBuffer buffer = new StringBuffer();String newLine =System.lineSeparator();try (BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));) {String line;while ((line = input.readLine()) != null) {String lineTrim = line.trim();String pre ="";if(line.startsWith(" ")){int length = line.length()-lineTrim.length();pre = this.getSpaceByNum(length*2);}if(lineTrim.startsWith("- ")){//有横杠的需要再加4个空格pre = pre+this.getSpaceByNum(4);}buffer.append(pre+lineTrim);buffer.append(newLine);}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath, false), "utf-8"))) {writer.write(buffer.toString());} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//获取指定数量的空格private String getSpaceByNum(int num){StringBuffer buffer = new StringBuffer();for(int i=0;i<num;i++){buffer.append(" ");}return buffer.toString();}private String getAEEncryptPassword(String input) {return input ;}}适配数据库⼯⼚类import java.util.LinkedHashMap;import java.util.Map;/*** AE数据源模板⼯⼚类*/public class AEDatasourceFactory {//oracle数据库private final String ORACLE_TYPE="jdbc:oracle";//sqlserver数据库类型private final String SQLSERVER_TYPE="jdbc:oracle";//db2数据库private final String DB2_TYPE="jdbc:db2";//达梦数据库private final String DM_TYPE="jdbc:dm";//pg数据库private final String PG_TYPE="dbc:postgresql";//⾼斯数据库private final String GAUSS_TYPE="jdbc:zenith";String url;String username;String password;public AEDatasourceFactory(String url, String username, String password) {this.url=url;ername=username;this.password=password;}/*** 获取更新数据源模板* @param springMap*/public void updateDatasourceTemplet(Map<String,Object> springMap){Map<String,Object> dataSource = (Map<String,Object>)springMap.get("datasource");Map<String,Object> jpaMap = (Map<String,Object>)dataSource.get("jpa");if(jpaMap==null){//应该是jpa和datasource同级的,// 但是他们提供的可能是不同级的jpaMap = springMap.get("jpa")!=null?(Map<String,Object>)springMap.get("jpa"):new LinkedHashMap<>(); }dataSource.clear();Map<String,Object> hikari = new LinkedHashMap<>();hikari.put("auto-commit",false);if(url.startsWith(ORACLE_TYPE) || url.startsWith(SQLSERVER_TYPE)){dataSource.put("type","com.zaxxer.hikari.HikariDataSource");dataSource.put("url",url);dataSource.put("username",username);dataSource.put("password",getAEEncryptPassword(password));dataSource.put("hikari",hikari);}else if(url.startsWith(DM_TYPE)){dataSource.put("url",url);dataSource.put("username",username);dataSource.put("password",getAEEncryptPassword(password));dataSource.put("driver-class-name","dm.jdbc.driver.DmDriver");}else if(url.startsWith(DB2_TYPE)){dataSource.put("type","com.zaxxer.hikari.HikariDataSource");dataSource.put("driver-class-name","com.ibm.db2.jcc.DB2Driver");dataSource.put("hikari",hikari);}else if(url.startsWith(GAUSS_TYPE)){dataSource.put("url",url);dataSource.put("username",username);dataSource.put("password",getAEEncryptPassword(password));dataSource.put("driver-class-name","com.huawei.gauss.jdbc.ZenithDriver");}else if(url.startsWith(PG_TYPE)){dataSource.put("type","com.zaxxer.hikari.HikariDataSource");dataSource.put("url",url);dataSource.put("username",username);dataSource.put("password",getAEEncryptPassword(password));dataSource.put("hikari",hikari);//pg没有jpajpaMap=null;}if(jpaMap!=null){getJpaTemplet(jpaMap);springMap.put("jpa",jpaMap);}}private void getJpaTemplet(Map<String,Object> jpaMap){if(jpaMap==null){return;}jpaMap.clear();Map<String,Object> properties = new LinkedHashMap<>();if(url.startsWith(ORACLE_TYPE) || url.startsWith(SQLSERVER_TYPE)){jpaMap.put("database-platform","org.hibernate.dialect.Oracle12cDialect");jpaMap.put("database","ORACLE");jpaMap.put("show-sql",false);properties.put("hibernate.id.new_generator_mappings",true);properties.put("hibernate.connection.provider_disables_autocommit",true);properties.put("e_second_level_cache",false);properties.put("e_query_cache",false);properties.put("hibernate.generate_statistics",false);jpaMap.put("properties",properties);}else if(url.startsWith(GAUSS_TYPE)){//不知道为啥要⽤oracle的properties.put("hibernate.dialect","org.hibernate.dialect.Oracle12cDialect");jpaMap.put("properties",properties);}else if(url.startsWith(DM_TYPE)){properties.put("hibernate.dialect","org.hibernate.dialect.DmDialect");jpaMap.put("properties",properties);}else if(url.startsWith(PG_TYPE)){}else if(url.startsWith(DB2_TYPE)){properties.put("hibernate.dialect","com.diwork.intelliv.workbench.auth.dialect.CustomDB2Dialect");properties.put("hibernate.auto_quote_keyword",true);jpaMap.put("properties",properties);jpaMap.put("show-sql",true);Map<String,Object> hibernate = new LinkedHashMap<>();Map<String,Object> naming = new LinkedHashMap<>();naming.put("physical-strategy","org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"); hibernate.put("naming",naming);jpaMap.put("hibernate",hibernate);}}//密码加密⽅法private String getAEEncryptPassword(String input) {return input ;}}这样修改了指定的内容,⽽且还保证了⽂件的原格式,但有个问题是⽂件的注释会丢失;。

java-hive-读写orc文件

java-hive-读写orc⽂件读取orc⽂件@Testpublic void readOrc() throws IOException {Configuration conf = new Configuration();Reader reader = OrcFile.createReader(new Path("/tmp/Orc.orc"),OrcFile.readerOptions(conf));RecordReader rows = reader.rows();VectorizedRowBatch batch = reader.getSchema().createRowBatch();while (rows.nextBatch(batch)) {System.out.println(batch.toString());}rows.close();}写orc⽂件---⼀⾏@Testpublic void writeLine3() throws IOException {Configuration conf = new Configuration();TypeDescription schema = TypeDescription.fromString("struct<x:int,y:int>");Writer writer = OrcFile.createWriter(new Path("/tmp/Orc.orc"),OrcFile.writerOptions(conf).setSchema(schema));VectorizedRowBatch batch = schema.createRowBatch();LongColumnVector x = (LongColumnVector) batch.cols[0];LongColumnVector y = (LongColumnVector) batch.cols[1];int row = batch.size++;x.vector[row] = 2;y.vector[row] = 2 * 3;if (batch.size != 0) {writer.addRowBatch(batch);batch.reset();}writer.close();}写orc⽂件--多⾏@Testpublic void writeLine2() throws IOException {String[] lines = new String[]{"1,a,aa", "2,b,bb", "3,c,cc", "4,d,dd", "1,a,aa", "2,b,bb", "3,c,cc", "4,d,dd", "1,a,aa", "2,b,bb", "3,c,cc", "4,d,dd", "1,a,aa", "2,b,bb", "3,c,cc", "4,d,dd"}; // String[] lines = new String[]{"1,2,4", "1,2,3", "1,2,3", "1,2,3", "1,2,3", "1,2,3", "1,2,3", "1,2,3"};Configuration conf = new Configuration();TypeDescription schema = TypeDescription.fromString("struct<field1:String,field2:String,field3:String>");// TypeDescription schema = TypeDescription.fromString("struct<field1:int,field2:int,field3:int>");Writer writer = OrcFile.createWriter(new Path("/tmp/Orc.orc"),OrcFile.writerOptions(conf).setSchema(schema).overwrite(true));VectorizedRowBatch batch = schema.createRowBatch();List<? super ColumnVector> columnVectors = new ArrayList<>();for (int i = 0; i < batch.numCols; i++) {columnVectors.add(batch.cols[i]);}for (String line : lines) {String[] columns = line.split(",");System.out.println(batch.size);int row = batch.size++;for (int i = 0; i < columns.length; i++) {switch (columnVectors.get(i).getClass().getName()) {case"org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector":BytesColumnVector bytesColumnVector = BytesColumnVector.class.cast(columnVectors.get(i));bytesColumnVector.setVal(row, columns[i].getBytes(), 0, columns[i].getBytes().length);break;case"org.apache.hadoop.hive.ql.exec.vector.LongColumnVector":LongColumnVector longColumnVector = LongColumnVector.class.cast(columnVectors.get(i));longColumnVector.vector[row] = Long.parseLong(columns[i]);break;case"org.apache.hadoop.hive.ql.exec.vector.Decimal64ColumnVector":Decimal64ColumnVector decimal64ColumnVector = Decimal64ColumnVector.class.cast(columnVectors.get(i));decimal64ColumnVector.set(row, HiveDecimal.create(columns[i]));break;case"org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector":DecimalColumnVector decimalColumnVector = DecimalColumnVector.class.cast(columnVectors.get(i));decimalColumnVector.set(row, HiveDecimal.create(columns[i]));break;case"org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector":DoubleColumnVector doubleColumnVector = DoubleColumnVector.class.cast(columnVectors.get(i));doubleColumnVector.vector[row] = Double.parseDouble(columns[i]);break;case"org.apache.hadoop.hive.ql.exec.vector.TimestampColumnVector":TimestampColumnVector timestampColumnVector = TimestampColumnVector.class.cast(columnVectors.get(i));timestampColumnVector.set(row, java.sql.Timestamp.valueOf(columns[i]));break;}if (batch.size == batch.getMaxSize()) {writer.addRowBatch(batch);batch.reset();}}}if (batch.size != 0) {writer.addRowBatch(batch);batch.reset();}writer.close();}引⽤jarimport org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;import org.apache.hadoop.hive.ql.exec.vector.ColumnVector;import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;import org.apache.orc.*;import org.junit.Test;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java字符读写文件(Writer,Reader)
说明:当reader 和 writer 对文件进行读写的时候,会根据系统属性编码格式对文件进行编码或解码。当文件的编码格式和系统的编码方
式不同时,还有可能对文件进行编码的转换。
InputStream、OutputStream直接操作byte
数组。不存在编码问题。

1
、读取指定大小的字符流。

2、字符方式读取全部的文件内容
1)、一个字符一个字符的读取,直到读取完毕,读取完的标志是-1

2)、设置字符长度的大小为文件的长度大小
3、字符写到文件中( 和字节写文件的构造方式相同,存在三种构造方式实例对象。)
1)文件方式实例对象
2)文件路径方式进行实例
3)参数说明是否追加内容
4、字符内容写到文件中

5、追加内容写文件

相关文档
最新文档