Java 使用FileInputStream执行多个操作
我有一个Java类来读取文件并将一些数据设置为类。我有一节课 FileMetadata.javaJava 使用FileInputStream执行多个操作,java,fileinputstream,Java,Fileinputstream,我有一个Java类来读取文件并将一些数据设置为类。我有一节课 FileMetadata.java public class FileMetadata implements Serializable { private String location; private Double size; private String content; private List<String> lines; private String md5Digest
public class FileMetadata implements Serializable {
private String location;
private Double size;
private String content;
private List<String> lines;
private String md5Digest;
//parameterized constructor
//getters and setters
}
public static void readFile(File file) throws IOException {
FileInputStream fis = null;
List<String> fileLines = new ArrayList<String>();
try {
fis = new FileInputStream(file);
StringBuilder sb = new StringBuilder();
StringBuilder sbLine = new StringBuilder();
int ch;
while ((ch = fis.read()) != -1) {
String line = "" + (char) ch;
sb.append(line);
if(line.matches("(\r|\n)")) {
fileLines.add(sbLine.toString());
sbLine.setLength(0);
} else {
sbLine.append(line);
}
}
String md5 = DigestUtils.md5Hex(fis);
System.out.println(md5);
System.out.println(sb.toString());
System.out.println(getFileSizeInKB(file));
for(String str : fileLines) {
System.out.println(str);
}
} finally {
if (fis != null) {
fis.close();
}
}
}
公共类FileMetadata实现可序列化{
私有字符串位置;
私人双户型;
私有字符串内容;
私有列表行;
私有字符串md5Digest;
//参数化构造函数
//接球手和接球手
}
读取文件后,我想设置这个类中的值
这是我读取文件的方法
FileUtil.java
public class FileMetadata implements Serializable {
private String location;
private Double size;
private String content;
private List<String> lines;
private String md5Digest;
//parameterized constructor
//getters and setters
}
public static void readFile(File file) throws IOException {
FileInputStream fis = null;
List<String> fileLines = new ArrayList<String>();
try {
fis = new FileInputStream(file);
StringBuilder sb = new StringBuilder();
StringBuilder sbLine = new StringBuilder();
int ch;
while ((ch = fis.read()) != -1) {
String line = "" + (char) ch;
sb.append(line);
if(line.matches("(\r|\n)")) {
fileLines.add(sbLine.toString());
sbLine.setLength(0);
} else {
sbLine.append(line);
}
}
String md5 = DigestUtils.md5Hex(fis);
System.out.println(md5);
System.out.println(sb.toString());
System.out.println(getFileSizeInKB(file));
for(String str : fileLines) {
System.out.println(str);
}
} finally {
if (fis != null) {
fis.close();
}
}
}
publicstaticvoidreadfile(文件文件)引发IOException{
FileInputStream fis=null;
List fileLines=new ArrayList();
试一试{
fis=新文件输入流(文件);
StringBuilder sb=新的StringBuilder();
StringBuilder sbLine=新的StringBuilder();
int-ch;
而((ch=fis.read())!=-1){
字符串行=”+(字符)ch;
某人附加(行);
if(line.matches(“(\r |\n)”)){
add(sbLine.toString());
sbLine.setLength(0);
}否则{
sbLine.append(行);
}
}
字符串md5=DigestUtils.md5Hex(fis);
系统输出打印项次(md5);
System.out.println(sb.toString());
System.out.println(getFileSizeInKB(file));
for(字符串str:fileLines){
系统输出打印项次(str);
}
}最后{
如果(fis!=null){
fis.close();
}
}
}
但是列表显示不正确,因为它在每行后面添加了一个空字符串,因为下一行的文件是“\r\n”。第二次添加空StringBuilder时,列表将在每行之后获得额外的空字符串。
我可以在添加到列表之前检查它的长度。但是如果文件包含空行,我想添加到列表中。您可以尝试使用
BufferedReader
类
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line=br.readLine())!=null) {
..............
}
br.close();
FileInputStream fis = new FileInputStream(file);
String md5 = DigestUtils.md5Hex(fis);
fis.close();
(示例中没有异常处理)。但是获取文件MD5怎么样?它需要InputStreamHi,您可以在读取文件后创建另一个流。我会用它更新答案。一般来说,重用流是不安全的。为新操作创建新的输入流。