`

java读取隐藏文件

    博客分类:
  • JAVA
阅读更多
java读写隐藏文件与普通的文件略有不同,如下:

如果使用:
FileOutputStream out = new FileOutputStream(file);
就会报错:拒绝访问
java.io.FileNotFoundException: **.txt (拒绝访问。)  
at java.io.FileOutputStream.open(Native Method)

即使我们设置写权限也一样。可以看到java调用本地方法open,

所以就不能调用open方法,而改调用openAppend方法,就是追加:
所以我们可以使用new FileOutputStream(file, true)  来实现写入,但是只能追加写入,而不能进行修改操作。
   
publicvoid appendDatatoHiddenFile(String file) {
       try {
           FileOutputStream out = new FileOutputStream(file, true);
           PrintStream p = new PrintStream(out);
           for (int i = 0; i < 10; i++)
              p.println("hello: " + i );
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       }
    }
 

那么如何任意操作“隐藏文件”呢?使用使用RandomAccessFile
简单介绍一下RandomAccessFile:

输入流FileInputStream和输出流 FileOutputStream,实现的是对磁盘文件的顺序读写,而且读写要分别创建不同对象。相比之下RandomAccessFile类则可对文件实现随机读写操作。

如某个文件有30个字节,读取数据过程中,从20-30读取,用skip( )//跳过方法。
RandomAccessFile类,即可以充当输入也可充当输出流。可以看作节点流。 RandomAccessFile对象的文件位置指针遵循下面的规律;新建RandomAccessFile对象的文件位置指针位于文件的开头处;每次读写操作之后,文件位置的指针都相应后移到读写的字节数;可以通过getFilePointer方法来获得文件位置指针的位置,通过seek方法来设置文件指针的位置。


RandomAccessFile常用方法: 
1.         RandomAccessFile (”路径+文件名”, String“rw”/”r”)两个参数
2.         Void close( ) 
3.         Long length( ) 
4.         Void seek( ) 
5.         Long getFilePointer( )获得当前指针位置,默认为0
6.         Int read( )从文件当前位置读取一个字节
7.         int read (byte[]b) 
8.         int read (byte[]b,int off,int len) 
9.         Final boolean readBoolean( )从文件当前位置读取boolean类型的一个字节  boolean在内存占1/8
10.     Final_ char readChar( )从文件中读取2个字节。
11.     Final int readInt( )从文件中读取4个字节。
12.     ##Final String readLine( )从文件中读取一行后转为String。
13.     Void write(byte[]b)将字节数组B中的数据写到文件中。
14.     Void write(byte[]b,int off,int len)将 len 个字节从指定字节数组写入到此文件,并从偏移量 off 处开始。
15.     Void write(int b)将指定的数据写到文件中。
16.     Final void writeBoolean(boolean v)将boolean类型的值按单字节的形式写到文件中0或1
17.     Final void writeChar(int v)将char值按2个字节写入到文件中
18.     Final void writeChars(String s)将字符串按字符方式写入到文件中
19.     Final void writeInt(int v)按四个字节将 int 写入该文件,先写高字节
20.     skipBytes(long i):从前往后拨弄指示器的位置,就是跳过多少个字节读取数据。
21.     Void seek(long p): 对指示器作决定性的定位,用于从后往前拨弄指示器的位置。对于seek方法,拥有skipBytes( )的功能,但seek( )在使用过程非常影响系统的开销。只有万不得已的情况下使用。


来个列子:
  
 publicvoid randomAccessFile(String file) throws Exception {
       RandomAccessFile f = new RandomAccessFile(file, "rw");
       System.out.println("File.lelngth:" + (f.length()) + "B");
       System.out.println("File PointPosition:" + f.getFilePointer());
       f.seek(f.length());
       f.writeBoolean(true);
       f.writeBoolean(false);
       f.writeChar('a');
       f.writeChars("hello!");
       System.out.println("File Length;" + (f.length()) + "B");
 
       f.seek(0);
       System.out.println(f.readBoolean());
       System.out.println(f.readBoolean());
       
       System.out.println(f.readLine());
       f.close();
    }
 
在来个处理中文的例子:
   
publicvoid chinesewrit(String toAppend) {
 
       try {
           // 写入
           int i = 0;
           String record = new String();
           String toCn = null;
           // 处理中文问题
           toCn = new String(toAppend.getBytes("GBK"), "ISO8859_1");
 
           RandomAccessFile rf = new RandomAccessFile("c:\\aaa.txt", "rw");
           rf.seek(rf.length());
           rf.writeBytes(toCn + "\n");
           rf.close();
           // 读取
           RandomAccessFile rf2 = new RandomAccessFile("c:/aaa.txt", "r");
           String outCn = null;
           while ((record = rf2.readLine()) != null) {
              i++;
              // 处理中文问题
              outCn = new String(record.getBytes("ISO8859_1"), "GBK");
 
              System.out.println("Line " + i + ":" + outCn);
           }
           rf2.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
 

说明上面的例子都是append得,如果要覆盖的话,就seek(0),然后写入!
欢迎转载:请标明出处进销存第一门户网www.jxc114.com
文章地址:http://www.jxc114.com/?action-viewspace-itemid-2901

分享到:
评论

相关推荐

    使用java8API遍历过滤文件目录及子目录及隐藏文件.docx

    1. 使用Files.list()迭代目录及其子目录文件 Files.list()可以迭代目录及其子目录文件 Files.list(Paths.get(".")) //当前目录 .forEach(System.out::println); 输出: .\filename1.txt ....\Employee.java

    java读取.xlxs Excel文件

    File file = new File("C:/Users/... //读取第一列数据 XSSFCell two = xssfRow.getCell(1); //读取第二列数据 XSSFCell three = xssfRow.getCell(2); //读取第三列数据 System.out.println(three); } } }

    蒸发密令.zip隐藏文件,神仙都找不到~~

    蒸发密令.zip隐藏文件,神仙都找不到~~

    java去掉txt文本的bom头信息

    java去掉txt文本的bom头信息,网上找了很多资料,自己整合了一下。

    获取目录文件属性信息,Java源代码.rar

    获取目录文件属性信息,Java源代码。先读取文件的属性信息,类似只读、存档、隐藏等这类文件固有的属性信息,然后将这些信息输送到预先准备好的文本框内并显示给用户看。

    Java开发技术大全(500个源代码).

    readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java ...

    java文件与I/O流

    高效的课件,详细的内容介绍,针对性的代码展示,提高性的练习题目。适合新手或者基础薄弱人员学习,一个PPT解决你编程中常见的错误,最重要的是一人下载多人使用,不受限制,没有隐藏密码

    java jdk实列宝典 光盘源代码

    读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....

    SpringCloud消息总线RabbitMQ+Bus-Refresh接口触发所有config-client自动重新读取配置文件

    实践方志鹏博客搭建Springcloud+RabbitMQ+Config-client+config-server Eureka-server的微服务架构,通过/bus/refresh接口触发所有config-client自动从config-server重新读取配置文件。SpringCloud和SpringBoot版本...

    Java2实用教程.rar

    4 8 3成员变量的隐藏和方法的重写 4 8 4final关键字 4 9对象的上转型对象 4 10多态性 4 11abstract类和abstract方法 4 12super关键字 4 13接口 4 13 1接口的声明与使用 4 13 2理解接口 4 13 3接口回调 4 13 4接口做...

    Java取得目录文件属性信息

    摘要:Java源码,文件操作,文件属性 Java取得目录文件信息,先读取文件的属性信息,类似只读、存档、隐藏等这类文件固有的属性信息,然后将这些信息输送到预先准备好的文本框内并显示给用户看。

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java 编程入门思考

    10.5.4 从标准输入中读取数据 10.5.5 管道数据流 10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 ...

    JDOM(java)使用详解及实例

    在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。 JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。 ...

    Java初学者入门教学

    10.5.4 从标准输入中读取数据 10.5.5 管道数据流 10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 ...

    java联想(中文)

    10.5.4 从标准输入中读取数据 10.5.5 管道数据流 10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 ...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    蓝牙FTP浏览器 FOR JAVA手机 Bluetooth File Transfer OBEX FTP

    软件名称:Bluetooth File Transfer OBEX FTP ...只需要简单操作,就可以一次可以删除或者发送多个文件,使用属性编辑器还可以设置文件的读写和隐藏属性。你还可以把经常需要连接的设备加入书签,让连接变得更迅速。

Global site tag (gtag.js) - Google Analytics