Java中的小问题:读出file1.txt的内容,输出到标准设备,验证写入的内容。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的小问题:读出file1.txt的内容,输出到标准设备,验证写入的内容。相关的知识,希望对你有一定的参考价值。
读出file1.txt的内容,输出到标准设备,验证写入的内容。
请问这里的标准输出是什么意思。我是初学者。希望能有详细的讲解和附带例子,谢谢
你可以读入file1.txt文件后通过system.out.println();输出是最简单的
例子:
java中多种方式读文件
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile
/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
* @param fileName 文件的名
*/
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)
/**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
* @param fileName 文件名
*/
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下,rn这两个字符在一起时,表示一个换行。
//但如果这两个字符分开显示时,会换两次行。
//因此,屏蔽掉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
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)
/**
* 以行为单位读取文件,常用于读面向行的格式化文件
* @param fileName 文件名
*/
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)
/**
* 随机读取文件内容
* @param fileName 文件名
*/
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)
/**
* 显示输入流中还剩的字节数
* @param in
*/
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);
参考技术A 标准设备 通常指你的显示器.
直接一点就是让你读文件并显示出来文件的内容. 参考技术B 默认的是当前显示器,一般都是系统环境默认设置的。你在java中的用于输出的现实的方法函数,默认就是输出到标准设备,比如说PrintStream 流类的printvln()函数就是把内容输出到标准设备的。再比如我们常用的System.out.print("Java");这也是输出到标准设备的。 参考技术C 标准输出 一般指控制台
从 Python3 中的 zip 存档中提取特定文件夹的内容
【中文标题】从 Python3 中的 zip 存档中提取特定文件夹的内容【英文标题】:Extract the content of a specific folder from a zip archive in Python3 【发布时间】:2020-02-19 12:58:21 【问题描述】:我有一个 zip 存档,其内部结构如下所示:
file.zip
|
--- foo/
|
--- bar/
|
--- file1.txt
|
--- dir/
|
--- file2.txt
我想使用 python3 将bar
的内容提取到输出目录,得到如下所示的内容:
output-dir/
|
--- file1.txt
|
--- dir/
|
--- file2.txt
但是,当我在bar
下面运行代码时,它的内容被提取到output-dir
import zipfile
archive = zipfile.ZipFile('path/to/file.zip')
for archive_item in archive.namelist():
if archive_item.startswith('bar/'):
archive.extract(archive_item, 'path/to/output-dir')
我该如何解决这个问题? 谢谢!
【问题讨论】:
不是真正的解决方案,而是一种规避问题的方法:解压到path/to
,得到path/to/bar
,然后将path/to/bar
重命名为path/to/output-dir
。
更改archive_item.startswith('file/bar/')
会给出bar目录内容
【参考方案1】:
不要使用ZipFile.extract
,而是使用ZipFile.open
、open
和shutil.copyfileobj
以便将文件准确地放在您想要的位置,使用路径操作来创建输出你需要的路径。
archive = zipfile.ZipFile('path/to/file.zip')
PREFIX = 'bar/'
out = pathlib.Path('path/to/output-dir')
for archive_item in archive.namelist():
if archive_item.startswith(PREFIX):
# strip out the leading prefix then join to `out`, note that you
# may want to add some securing against path traversal if the zip
# file comes from an untrusted source
destpath = out.joinpath(archive_item[len(PREFIX):])
# make sure destination directory exists otherwise `open` will fail
os.makedirs(destpath.parent, exist_ok=True)
with archive.open(archive_item) as source,
open(destpath, 'wb') as dest:
shutil.copyfileobj(source, dest)
类似的东西。
【讨论】:
我建议把4
改成len('bar/')
,这样更容易修改。以上是关于Java中的小问题:读出file1.txt的内容,输出到标准设备,验证写入的内容。的主要内容,如果未能解决你的问题,请参考以下文章