「java随机读写」java随机读写删除文件中某一行的数据
今天给各位分享java随机读写的知识,其中也会对java随机读写删除文件中某一行的数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 怎么读取音乐文件
- 2、java问题,求解决。事后给更高分
- 3、Java中的I/O流的基本知识
- 4、java中对文件进行读写操作的基本类是什么?
- 5、java读取写入文件问题
- 6、java 读写文件异常怎么处理
java 怎么读取音乐文件
以随机读写方式打开一个MP3文件
将文件指针偏移量移动到文件长度倒数128位
判断标签头"TAG"是否存在
读取TAG_V1中的各个内容
关闭文件
TAG_V1(长度是固定的)其中包括的信息有:
标签头"TAG" 3字节
标题 30字节
作者 30字节
专辑 30字节
出品年份 4字节
备注信息 28字节
保留 1字节
音轨 1字节
类型 1字节
读
入一个MP3文件的TAG_V1部分信息:
byte buf = new byte[128];//初始化标签信息的byte数组
RandomAccessFile raf = new RandomAccessFile(mp3, "r");//随机读写方式打开MP3文件
raf.seek(raf.length() - 128);//移动到文件MP3末尾
raf.read(buf);//读取标签信息
raf.close();//关闭文件
if(buf.length != 128){//数据长度是否合法
throw new Exception("MP3标签信息数据长度不合法!");
}
if(!"TAG".equalsIgnoreCase(new String(buf,0,3))){//标签头是否存在
throw new Exception("MP3标签信息数据格式不正确!");
}
获得TAG_V1中的各个内容:
String SongName = new String(buf,3,30,"utf-8").trim();//歌曲名称
String Artist = new String(buf,33,30,"utf-8").trim();//歌手名字
String Album = new String(buf,63,30,"utf-8").trim();//专辑名称
String Year = new String(buf,93,4,"utf-8").trim();//出品年份
String Comment = new String(buf,97,28,"utf-8").trim();//备注信息
java问题,求解决。事后给更高分
1.在API中的官方描述:此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
2.InputStream此抽象类是表示字节输入流的所有类的超类。
需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。其中的read方法在InputStream中是被抽象掉的,所以要在其子类中实现。比如FileInputStream中提供了read(byte b);同样的道理在OutputStream中write()被抽象掉了。需要在具体的子类中描述这种写出的形式。
3.FileInputStream是要根据你调用他哪种read()方法决定读取格式,如果你是read()则是一个字节一个字节读,read(byte b)则是用一个麻袋(即数组长度为b)一袋一袋装字节读取。read(byte[] b, int off, int len) 则是用一个麻袋的一部分(数组下标从off到len的长度)装字节读取。
同理FileOutputStream有类似的write()三重载。
4.对象序列化是了方便对象传输,Java只有在JVM虚拟机中才叫java,脱离了虚拟机,就是堆乱码,为了通过像HTTP这样桥,java中的类(对象)改头换面,从怪卡变成普通人的过程叫做对象序列化。实现的过程:1,让class A implements Serializable 把A变得可序列化;2,建立ObjectOutputStream oos=ObjectOutputStream(FileOutputStream("d:/outman/obj"));告诉他:他妈妈叫他回家(即目标地址obj)序列化;3,oos.writeObject(A);他妈把他抽一顿,让他变身成为可传输文件;4,oos.close。如果A的对象有很多,可以考虑放入一个ArrayList中,把ArrayListA序列化。这样妈妈只要抽他们中的老大(内存地址),抽完老大他们就都老实了,都可以被传输了。
Java中的I/O流的基本知识
1、与外部设备和其它计算机进行交流的输入输出操作,尤其是对磁盘的文件操作,是计算机程序重要的功能,任何计算机语言都必须对输入输出提供支持。Java也不例外,它的输入输出类库中包含了丰富的系统工具,这些类被放在java.io包中。在该类库中,除了定义文件输入输出操作外,还定义了许多用来和其他外设进行信息交换的类。
2、流(Stream)指的是在计算机的输入与输出之间运动的数据序列:输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列。
流式输入输出是一种很常见的输入输出方式,它最大的特点是数据的获取和发送均沿数据序列顺序进行:每一个数据都必须等待排在它前面的数据读入或输出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能够随意选择输入输出的位置。磁带机是实现流式输入输出的典型设备
3、InputStream和OutputStream是java.io包中的两个抽象类,他们分别是其他所有输入、输出流类的父类。其他所有输入流类都是继承了InputStream的基本输入功能并根据自身属性对这些功能加以扩充;同样,其他所有输出流类也都是继承了OutputStream类的基本输出功能并加以扩展的
4、File类是IO包中惟一代表磁盘文件本身的对象,File对象定义了一些与平台无关的方法来操纵文件
创建File类对象时需指明它所对应的文件或目录名。File类共提供了4个不同的构造方法,以不同的参数形式灵活地接收文件和目录名信息
5、FileReader和FileWrite类分别继承自Reader类和Writer类,继承关系如图6-2所示。FileReader类用于读取文件;FileWrite类用于将数据写入文件。在使用这两个类之前,必须调用其构造方法创建相应的对象,然后才能调用相应的read()或write()方法进行文件的读写操作
6、BufferedReader和BufferedWrite类分别继承自Reader类和Writer类,BufferedReader类用来从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。BufferedWrite类用于将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
7、LineNumberReader类是BufferedReader类的直接子类。该类允许对文本输入数据流加入行号。
此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从0开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用setLineNumber(int)更改行号。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值
8、LineNumberReader类是BufferedReader类的直接子类。该类允许对文本输入数据流加入行号。
此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从0开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用setLineNumber(int)更改行号。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值使用RandomAccessFile类随机读写文件时,在创建了一个RandomAccessFile对象之后,该文件即对文件描述句柄处于打开状态。此时,文件的指针处于文件开始位置。可以通过seek(long pos)方法设置文件指针的当前位置,以进行文件的快速定位,然后使用相应的read()和write()方法对文件进行读写操作。在对文件的读写操作完成后,调用close()方法关闭文件
9、FileInputStream和FileOutputStream类主要用来处理以“位为主”的输入输出操作。其中,FileInputStream类继承于InputStream类;FileOutputStream类继承于OutputStream类。
与RandomAccessFile类所不同的是,FileInputStream和FileOutputStream类中提供的文件处理方式是文件中数据流的顺序读写,而不是利用文件指针进行定位的随机读写
10、Java中的PipedInputStream和PipedOutputStream类提供了利用管道方式进行数据输入输出管理。管道流用来将一个程序或者线程的输出连接到另外一个程序或线程作为输入,使得相连线程能够通过PipedInputStream和PipedOutputStream类进行数据交换。
PipedInputStream和PipedOutputStream类也是InputStream和OutputStream类的直接子类。这两个类必须结合使用,其中,管道输入流作为管道的接收端、管道输出流作为管道的发送端,在程序设计中应注意数据的传输方向
顺序输入流SequenceInputStream是InputStream的直接子类,其功能是将多个输入流连接在一起,形成单一的输入数据流,没有对应的输出数据流存在。
顺序输入流SequenceInputStream由多个输入流构造而成,它从输入流的有序集合开始,并从第一个输入流开始读取,直到文件末尾,接着从第二个输入流读取,依次类推,直到到达顺序输入流包含的最后一个输入流的文件末尾为止
java中对文件进行读写操作的基本类是什么?
Java.io包中包括许多类提供许多有关文件的各个方面操作。
1 输入输出抽象基类InputStream/OutputStream ,实现文件内容操作的基本功能函数read()、 write()、close()、skip()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。在文件读写的编程过程中主要应该注意异常处理的技术。
2 FileInputStream/FileOutputStream:
用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象);
本地文件读写编程的基本过程为:
① 生成文件流对象(对文件读操作时应该为FileInputStream类,而文件写应该为FileOutputStream类);
② 调用FileInputStream或FileOutputStream类中的功能函数如read()、write(int b)等)读写文件内容;
③ 关闭文件(close())。
3 PipedInputStream/PipedOutputStream:
用于管道输入输出(将一个程序或一个线程的输出结果直接连接到另一个程序或一个线程的输入端口,实现两者数据直接传送。操作时需要连结);
4管道的连接:
方法之一是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象
PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream(pInput);
方法之二是利用双方类中的任一个成员函数 connect()相连接
PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream();
pinput.connect(pOutput);
5 管道的输入与输出:
输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据);而输入管道对象调用read()成员函数可以读起数据(即从输出管道中获得数据)。这主要是借助系统所提供的缓冲机制来实现的。
6随机文件读写:
RandomAccessFile类(它直接继承于Object类而非InputStream/OutputStream类),从而可以实现读写文件中任何位置中的数据(只需要改变文件的读写位置的指针)。
随机文件读写编程的基本过程为:
① 生成流对象并且指明读写类型;
② 移动读写位置;
③ 读写文件内容;
④ 关闭文件。
七里河团队答疑助人,希望我的回答对你有所帮助
java读取写入文件问题
java 追加内容到文件末尾的几种常用方法
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
public class AppendToFile {
/**
* A方法追加文件:使用RandomAccessFile
*/
public static void appendMethodA(String fileName, String content) {
try {
// 打开一个随机访问文件流,按读写方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
// 文件长度,字节数
long fileLength = randomFile.length();
//将写文件指针移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* B方法追加文件:使用FileWriter
*/
public static void appendMethodB(String fileName, String content) {
try {
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "E:/newTemp.dat";
String content = "new append!";
//按方法A追加文件
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, "append end.");
//显示文件内容
ReadFromFile.readFileByBytes(fileName);//.readFileByLines(fileName);
/* //按方法B追加文件
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, "append end. \n");
//显示文件内容
ReadFromFile.readFileByBytes(fileName);*/
// ReadFromFile.readFileByLines(fileName);
}
}
java 读写文件异常怎么处理
public class ReadFromFile {
/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*/
public static void readFileByBytes(String fileName) {
File file = new File(fileName);
InputStream in = null;
try {
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1) {
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1) {
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
*/
public static void readFileByChars(String fileName) {
File file = new File(fileName);
Reader reader = null;
try {
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1) {
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
(tempchars[tempchars.length - 1] != '\r')) {
System.out.print(tempchars);
} else {
for (int i = 0; i charread; i++) {
if (tempchars[i] == '\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行为单位读取文件,常用于读面向行的格式化文件
*/
public static void readFileByLines(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 随机读取文件内容
*/
public static void readFileByRandomAccess(String fileName) {
RandomAccessFile randomFile = null;
try {
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
long fileLength = randomFile.length();
// 读文件的起始位置
int beginIndex = (fileLength 4) ? 4 : 0;
// 将读文件的开始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -1) {
System.out.write(bytes, 0, byteread);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (randomFile != null) {
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 显示输入流中还剩的字节数
*/
private static void showAvailableBytes(InputStream in) {
try {
System.out.println("当前字节输入流中的字节数为:" + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
关于java随机读写和java随机读写删除文件中某一行的数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。