Java 如何从输入流重新打开文件
我想重新打开一个文件。我在输入流中有一个文件。我试过使用Scanner和BufferedReader。但在使用close()方法关闭文件后,我无法再次打开该文件。请帮助如何再次打开文件。 我已经编写了以下代码:Java 如何从输入流重新打开文件,java,file-io,Java,File Io,我想重新打开一个文件。我在输入流中有一个文件。我试过使用Scanner和BufferedReader。但在使用close()方法关闭文件后,我无法再次打开该文件。请帮助如何再次打开文件。 我已经编写了以下代码: InputStream filename = getAttachstream(); int rows =0 ; BufferedReader br= new BufferedReader(new InputStreamReader(filename))
InputStream filename = getAttachstream();
int rows =0 ;
BufferedReader br= new BufferedReader(new InputStreamReader(filename));
String strLine = "";
try {
while( (strLine = br.readLine()) != null) {
rows++;
}
//br.reset();
br.close();
//br.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(rows>0){
InputStream filename1 = getAttachstream();
Scanner inputStream1 = new Scanner(filename1);
for (int rowIncr = 1; inputStream1.hasNext(); rowIncr++) {
String data;
try {
data = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String [] values = data.split(",");
String curRowPartNumber = values[0];
String curRowQuantity = values[1];
if(rowIncr == 1)
{
if((values[0]==null || values[0].trim().length()<=0)
|| (values[1]==null || values[1].trim().length()<=0)
|| (values[2] != "") || !"Part Number".equalsIgnoreCase(values[0].trim())
|| !"Quantity".equalsIgnoreCase(values[1].trim())){
System.out.println("Invalid Excel sheet data");
throw new ECApplicationException(ECMessage._ERR_CMD_INVALID_DATAFORMAT, CLASSNAME,methodName);
}
}
InputStream文件名=getAttachstream();
int行=0;
BufferedReader br=新的BufferedReader(新的InputStreamReader(文件名));
字符串strLine=“”;
试一试{
而((strLine=br.readLine())!=null){
行++;
}
//br.reset();
br.close();
//br.reset();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
如果(行数>0){
InputStream文件名1=getAttachstream();
Scanner inputStream1=新扫描仪(文件名1);
对于(int rowIncr=1;inputStream1.hasNext();rowIncr++){
字符串数据;
试一试{
data=br.readLine();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字符串[]值=data.split(“,”);
字符串curRowPartNumber=值[0];
字符串curRowQuantity=值[1];
如果(rowIncr==1)
{
如果((值[0]==null | |值[0].trim().length()一旦流、读取器、写入器、套接字或任何其他资源关闭,则无法再次打开它
如果要多次读取一个文件,则需要有其文件名。我假定您的意思是重新打开从getAttachstream
获取的InputStream(即使它没有在任何地方显示它来自文件)
唯一的选择是getAttachstream
返回实现该方法的类。请记住,即使FileInputStream
也不提供该选项。而且,即使您找到了具体的类,并且它碰巧有这样一个方法,因为该方法的定义返回了InputStream
,您也不能被拒绝它总是返回同一个类(甚至在所有情况下都返回该类)
唯一的选择是使用原始inputStream并将其写入临时文件或ByteArrayOutputStream的(如果文件足够小,不需要使用太多内存),这样您就可以多次访问数据。您可以使用scanner对行进行计数
如果此扫描仪的输入中有另一行,则返回true。此方法在等待输入时可能会阻塞。扫描仪不会超过任何输入
您写道:“但是什么都不起作用”。我们问:是否有任何错误,错误消息是什么?在getAttachstream()中有什么内容
?您不需要读取任何文件两次。您试图解决的实际问题是什么?只需添加到您的答案中,一旦关闭流包装器,它也会关闭所有底层流。添加到Peter的答案中:“如果您想多次读取一个文件,您需要有其文件名。”换句话说,您必须再次将getAttachstream()
重新分配给filename1
,并且必须再次将newscanner(filename1)
重新分配给inputStream1
。在解析文件一次(多次)之后,执行这两项操作,然后返回到文件的开头。
File file = new File("C:/test.txt");
File file1 = new File("C:/test1.txt");
Scanner scanner;
try {
FileInputStream fileInputStream = new FileInputStream(file);
FileInputStream fileInputStream1 = new FileInputStream(file1);
scanner = new Scanner(fileInputStream);
int count = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
count++;
}
scanner.close();
System.out.println("File 1 Count:" + count);
scanner = new Scanner(fileInputStream1);
count = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
count++;
}
System.out.println("File 2 Count:" + count);
scanner.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}