📄 perpetualreader0.java
字号:
/**
* PerpetualReader.java
*
*
* Created: Wed Sep 22 1999
*
* @author Steven J. Zeil
* @version
*/
package edu.odu.cs.zeil.AlgAE.Client;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import edu.odu.cs.zeil.AlgAE.Debug;
/**
* PerpetualReader is a buffered input file that reopens the file,
* restarting from the beginning, after each time it hits end-of-file.
*/
public class PerpetualReader extends Reader
{
private String fileName;
private BufferedReader reader;
private int resetLimit;
private int resetCount;
/**
* Create a buffering character-input stream that restarts
* at the beginning after reaching end-of-file.
*
* @param theFileName Name of file to open
* @param maxPasses Number of passes to make over file. If 0,
* make infinite passes until file is closed.
*/
public PerpetualReader(String fileNameOrURL, int maxPasses)
throws java.io.FileNotFoundException, java.io.IOException
{
fileName = fileNameOrURL;
openReader();
resetLimit = maxPasses;
resetCount = 0;
}
/**
* Read a single character. This method will block until a character
* is available, an I/O error occurs, or the end of the stream is
* reached.
*
* @returns The character read, as an integer in the range 0 to
* 16383 (0x00-0xffff), or -1 if the file is empty
*/
public int read()
throws java.io.FileNotFoundException, java.io.IOException
{
int c = reader.read();
if (c < 0)
{
reader.close();
openReader();
c = reader.read();
}
//Debug.show (Debug.clientread, "read " + c);
return c;
}
/**
* Read characters into a portion of an array.
*
* @param cbuf Destination buffer
* @param off Offset at which to start storing characters
* @param len Maximum number of characters to read
*
* @returns The number of characters read, or -1 if the file is empty
*/
public int read(char[] cbuf, int off, int len)
throws java.io.IOException
{
for (int i = 0; i < len; ++i)
{
cbuf[i+off] = (char)reader.read();
if (cbuf[i+off] < 0)
return -1;
}
return len;
}
/**
* Close the stream.
*/
public void close() throws java.io.IOException
{
reader.close();
}
/**
* Open as a file or as a URL
*/
private void openReader()
throws java.io.FileNotFoundException, java.io.IOException
{
if ((resetLimit == 0) || (resetCount < resetLimit))
{
++resetCount;
boolean isURL = (fileName.indexOf("://") >= 0)
|| (fileName.indexOf("file:") == 0);
// First, read the source code
reader = null;
try {
if (isURL)
{
URL url = new URL(fileName);
reader = new BufferedReader
(new InputStreamReader (url.openStream()));
}
else
reader = new BufferedReader (new FileReader (fileName));
}
catch (java.net.MalformedURLException e)
{
throw new java.io.FileNotFoundException();
}
Debug.show (Debug.clientread, "opened " + fileName);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -