📄 xinputfileimpl.java
字号:
/*
* @(#)XInputFileImpl.java - implementation for files
*
* Copyright (c) 2004-2005 by roehrist, All Rights Reserved.
*
* This file is part of X, a free Java based demux utility.
* X is intended for educational purposes only, as a non-commercial test project.
* It may not be used otherwise. Most parts are only experimental.
*
*
* This program is free software; you can redistribute it free of charge
* and/or modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package net.sourceforge.dvb.projectx.xinput.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.MalformedURLException;
import net.sourceforge.dvb.projectx.xinput.FileType;
import net.sourceforge.dvb.projectx.xinput.XInputFileIF;
import net.sourceforge.dvb.projectx.common.Common;
import net.sourceforge.dvb.projectx.gui.Dialogs;
import net.sourceforge.dvb.projectx.common.Resource;
public class XInputFileImpl implements XInputFileIF {
private boolean debug = false;
// Members, which are type independent
private FileType fileType = null;
private boolean isopen = false;
private InputStream inputStream = null;
// Members used for type FileType.FILE
private File file = null;
private String file_separator = System.getProperty("file.separator");
private RandomAccessFile randomAccessFile = null;
private Object constructorParameter = null;
/**
* Private Constructor, don't use!
*/
private XInputFileImpl() {
throw new UnsupportedOperationException();
}
/**
* Create a XInputFile of type FileType.FILE.
*
* @param aFile
* File data to use
* @throws IllegalArgumentException
* If aFile is not a file
*/
public XInputFileImpl(File aFile) {
if (debug) System.out.println("Try to create XInputFile of Type FILE");
if (!aFile.isFile()) { throw new IllegalArgumentException("File is not of type FileType.FILE"); }
file = aFile;
fileType = FileType.FILE;
if (!exists()) { throw new IllegalArgumentException("File doesn't exist"); }
if (debug) System.out.println("Succeeded to create XInputFile of Type FILE");
}
/**
* Get String representation of the object.
*
* @return String representation of the object
*/
public String toString() {
return file.getAbsolutePath();
}
public void setConstructorParameter(Object obj) {
constructorParameter = obj;
}
public Object getConstructorParameter() {
return constructorParameter;
}
/**
* Get url representation of the object.
*
* @return String with url
*/
public String getUrl() {
return "file://" + file.getAbsolutePath();
}
/**
* Length of file in bytes.
*
* @return Length of file in bytes
*/
public long length() {
return file.length();
}
/**
* Time in milliseconds from the epoch.
*
* @return Time in milliseconds from the epoch
*/
public long lastModified() {
return file.lastModified();
}
/**
* Checks if file exists
*
* @return Result of check
*/
public boolean exists() {
return file.exists();
}
/**
* Get Name of file
*
* @return Name of file
*/
public String getName() {
return file.getName();
}
/**
* Get Path of parent
*
* @return Path of parent
*/
public String getParent() {
return file.getParent();
}
/**
* Get input stream from the file. close() on stream closes XInputFile, too.
*
* @return Input stream from the file
*/
public InputStream getInputStream() throws FileNotFoundException, MalformedURLException, IOException {
return new FileInputStream(file);
}
/**
* rename this file
* @return
*/
public boolean rename() throws IOException {
// if (isopen) { throw new IllegalStateException("XInputFile is open!"); }
if (isopen)
return false;
String parent = getParent();
String name = getName();
String newName = null;
boolean ret = false;
if ( !parent.endsWith(file_separator) )
parent += file_separator;
newName = Dialogs.getUserInput( name, Resource.getString("autoload.dialog.rename") + " " + parent + name);
if (newName != null && !newName.equals(""))
{
if (new File(parent + newName).exists())
{
ret = Dialogs.getUserConfirmation(Resource.getString("autoload.dialog.fileexists"));
if (ret)
{
new File(parent + newName).delete();
ret = Common.renameTo(parent + name, parent + newName);
}
}
else
ret = Common.renameTo(parent + name, parent + newName);
}
if (ret)
{
file = new File(parent + newName);
constructorParameter = file;
}
return ret;
}
/**
* Opens XInputFile for random access
*
* @param mode
* Access mode as in RandomAccessFile
* @throws IOException
*/
public void randomAccessOpen(String mode) throws IOException {
if (isopen) { throw new IllegalStateException("XInputFile is already open!"); }
randomAccessFile = new RandomAccessFile(file, mode);
isopen = true;
}
/**
* @throws java.io.IOException
*/
public void randomAccessClose() throws IOException {
if (!isopen) { throw new IllegalStateException("XInputFile is already closed!"); }
if (randomAccessFile != null) {
randomAccessFile.close();
randomAccessFile = null;
}
isopen = false;
}
/**
* @param aPosition
* The offset position, measured in bytes from the beginning of the
* file, at which to set the file pointer.
* @throws java.io.IOException
*/
public void randomAccessSeek(long aPosition) throws IOException {
randomAccessFile.seek(aPosition);
}
/**
* @return @throws
* IOException
*/
public long randomAccessGetFilePointer() throws IOException {
return randomAccessFile.getFilePointer();
}
/**
* @return @throws
* IOException
*/
public int randomAccessRead() throws IOException {
return randomAccessFile.read();
}
/**
* @param aBuffer
* The buffer into which the data is read.
* @return @throws
* java.io.IOException
*/
public int randomAccessRead(byte[] aBuffer) throws IOException {
return randomAccessFile.read(aBuffer);
}
/**
* @param aBuffer
* The buffer into which the data is written.
* @param aOffset
* The offset at which the data should be written.
* @param aLength
* The amount of data to be read.
* @return @throws
* IOException
*/
public int randomAccessRead(byte[] aBuffer, int aOffset, int aLength) throws IOException {
return randomAccessFile.read(aBuffer, aOffset, aLength);
}
/**
* @return Read line
* @throws IOException
*/
public String randomAccessReadLine() throws IOException {
return randomAccessFile.readLine();
}
/**
* @param aBuffer
* The data.
* @throws java.io.IOException
*/
public void randomAccessWrite(byte[] aBuffer) throws IOException {
randomAccessFile.write(aBuffer);
}
/**
* Convinience method for a single random read access to a input file. The
* file is opened before and closed after read.
*
* @param aBuffer
* Buffer to fill with read bytes (up to aBuffer.length() bytes)
* @param aPosition
* Fileposition at which we want read
* @throws IOException
*/
public void randomAccessSingleRead(byte[] aBuffer, long aPosition) throws IOException {
randomAccessOpen("r");
randomAccessSeek(aPosition);
randomAccessRead(aBuffer);
randomAccessClose();
}
/**
* @return Long value read.
* @throws java.io.IOException
*/
public long randomAccessReadLong() throws IOException {
return randomAccessFile.readLong();
}
/*
* (non-Javadoc)
*
* @see net.sourceforge.dvb.projectx.xinput.XInputFileIF#getFileType()
*/
public FileType getFileType() {
return fileType;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -