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.openopenshutil.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的内容,输出到标准设备,验证写入的内容。的主要内容,如果未能解决你的问题,请参考以下文章

python笔记day3

java类结合jsp页面怎么把磁盘目录下的文件全部读取出来

C/C++实现文件读写操作

重命名cmd中的多个文件

Perl:匹配两个文件中的数据

一个关于在VB中将Recordset 读出的内容放到一个数组变量中的问题!!