📄 fileutils.java
字号:
return false ;
}
/** Check whether a name is an absolute URI (has a scheme name)
*
* @param name
* @return boolean True if there is a scheme name
*/
public static boolean isURI(String name)
{
return (getScheme(name) != null) ;
}
public static String getScheme(String uri)
{
// Find "[^/:]*:.*"
for ( int i = 0 ; i < uri.length() ; i++ )
{
char ch = uri.charAt(i) ;
if ( ch == ':' )
return uri.substring(0,i) ;
if ( ! isASCIILetter(ch) )
// Some illegal character before the ':'
break ;
}
return null ;
}
private static boolean isASCIILetter(char ch)
{
return ( ch >= 'a' && ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z' ) ;
}
/**
* Get the directory part of a filename
* @param filename
* @return Directory name
*/
public static String getDirname(String filename)
{
File f = new File(filename) ;
return f.getParent() ;
}
/** Get the basename of a filename
*
* @param filename
* @return Base filename.
*/
public static String getBasename(String filename)
{
File f = new File(filename) ;
return f.getName() ;
}
/**
Get the suffix part of a file name or a URL in file-like format.
*/
public static String getFilenameExt( String filename)
{
int iSlash = filename.lastIndexOf( '/' );
int iBack = filename.lastIndexOf( '\\' );
int iExt = filename.lastIndexOf( '.' );
if (iBack > iSlash) iSlash = iBack;
return iExt > iSlash ? filename.substring( iExt+1 ).toLowerCase() : "";
}
/**
create a temporary file that will be deleted on exit, and do something
sensible with any IO exceptions - namely, throw them up wrapped in
a JenaException.
@param prefix the prefix for File.createTempFile
@param suffix the suffix for File.createTempFile
@return the temporary File
*/
public static File tempFileName( String prefix, String suffix )
{
File result = new File( getTempDirectory(), prefix + randomNumber() + suffix );
if (result.exists()) return tempFileName( prefix, suffix );
result.deleteOnExit();
return result;
}
/**
Answer a File naming a freshly-created directory in the temporary directory. This
directory should be deleted on exit.
TODO handle threading issues, mkdir failure, and better cleanup
@param prefix the prefix for the directory name
@return a File naming the new directory
*/
public static File getScratchDirectory( String prefix )
{
File result = new File( getTempDirectory(), prefix + randomNumber() );
if (result.exists()) return getScratchDirectory( prefix );
if (result.mkdir() == false) throw new JenaException( "mkdir failed on " + result );
result.deleteOnExit();
return result;
}
public static String getTempDirectory()
{ return JenaRuntime.getSystemProperty( "java.io.tmpdir" ); }
private static int counter = 0;
private static int randomNumber()
{
return ++counter;
}
// TODO Replace with a FileManager
/**
Answer a BufferedReader than reads from the named resource file as
UTF-8, possibly throwing WrappedIOExceptions.
*/
public static BufferedReader openResourceFile( String filename )
{
try
{
InputStream is = FileUtils.openResourceFileAsStream( filename );
return new BufferedReader(new InputStreamReader(is, "UTF-8"));
}
catch (IOException e)
{ throw new WrappedIOException( e ); }
}
/**
* Open an resource file for reading.
*/
public static InputStream openResourceFileAsStream(String filename)
throws FileNotFoundException {
InputStream is = ClassLoader.getSystemResourceAsStream(filename);
if (is == null) {
// Try local loader with absolute path
is = FileUtils.class.getResourceAsStream("/" + filename);
if (is == null) {
// Try local loader, relative, just in case
is = FileUtils.class.getResourceAsStream(filename);
if (is == null) {
// Can't find it on classpath, so try relative to current directory
// Will throw security exception under and applet but there's not other choice left
is = new FileInputStream(filename);
}
}
}
return is;
}
// TODO Replace with FileManager
public static BufferedReader readerFromURL( String urlStr )
{
try { return asBufferedUTF8( new URL(urlStr).openStream() ); }
catch (java.net.MalformedURLException e)
{ // Try as a plain filename.
try { return asBufferedUTF8( new FileInputStream( urlStr ) ); }
catch (FileNotFoundException f) { throw new WrappedIOException( f ); }
}
catch (IOException e)
{ throw new WrappedIOException( e ); }
}
/** Read a whole file as UTF-8
* @param filename
* @return String
* @throws IOException
*/
public static String readWholeFileAsUTF8(String filename) throws IOException {
InputStream in = new FileInputStream(filename) ;
return readWholeFileAsUTF8(in) ;
}
/** Read a whole stream as UTF-8
*
* @param in InputStream to be read
* @return String
* @throws IOException
*/
public static String readWholeFileAsUTF8(InputStream in) throws IOException
{
Reader r = new BufferedReader(asUTF8(in),1024) ;
return readWholeFileAsUTF8(r) ;
}
/** Read a whole file as UTF-8
*
* @param r
* @return String The whole file
* @throws IOException
*/
// Private worker as we are trying to force UTF-8.
private static String readWholeFileAsUTF8(Reader r) throws IOException
{
StringWriter sw = new StringWriter(1024);
char buff[] = new char[1024];
while (r.ready()) {
int l = r.read(buff);
if (l <= 0)
break;
sw.write(buff, 0, l);
}
r.close();
sw.close();
return sw.toString();
}
}
/*
* (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -