perpetualreader0.java

来自「ALGAE是一个快速创建算法演示的框架。目前支持的算法实现语言包括java和c」· Java 代码 · 共 142 行

JAVA
142 行
字号
/**
 * 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 + =
减小字号Ctrl + -
显示快捷键?