com.thaiopensource.util.UriOrFile Maven / Gradle / Ivy
package com.thaiopensource.util;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
public class UriOrFile {
private UriOrFile() {
}
public static String toUri(String uriOrFile) {
String scheme = getScheme(uriOrFile);
// if it has a schema that isn't a single letter treat is as a URI,
// otherwise treat it as a file and convert it to a URI
return scheme != null && scheme.length() > 1 ? uriOrFile : fileToUri(uriOrFile);
}
private static String getScheme(String str) {
int len = str.length();
if (len == 0)
return null;
if (!isAlpha(str.charAt(0)))
return null;
for (int i = 1; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case ':':
return str.substring(0, i);
case '+':
case '-':
break;
default:
if (!isAlnum(c))
return null;
break;
}
}
return null;
}
private static boolean isAlpha(char c) {
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
}
private static boolean isAlnum(char c) {
return isAlpha(c) || ('0' <= c && c <= '9');
}
public static String fileToUri(String file) {
return fileToUri(new File(file));
}
public static String fileToUri(File file) {
return file.toURI().toString();
}
public static String uriToUriOrFile(String uri) {
// try to avoid throwing an exception in the common case
if ("file".equalsIgnoreCase(getScheme(uri))) {
try {
return new File(new URI(uri)).toString();
}
// not a valid URI
catch (URISyntaxException e) { }
// not a valid file URI
catch (IllegalArgumentException e) { }
}
return uri;
}
}