*/
package jalview.io;
+import java.util.Locale;
+
import java.io.File;
import java.io.IOException;
*/
public class IdentifyFile
{
-
- public FileFormatI identify(Object file, DataSourceType protocol) throws FileFormatException
+
+ public FileFormatI identify(Object file, DataSourceType protocol)
+ throws FileFormatException
{
// BH 2018
- return (file instanceof File ? identify((File) file, protocol) : identify((String) file, protocol));
-
+ return (file instanceof File ? identify((File) file, protocol)
+ : identify((String) file, protocol));
+
}
public FileFormatI identify(File file, DataSourceType sourceType)
if (source.inFile != null)
{
String fileStr = source.inFile.getName();
- if (fileStr.contains(".jar")
- || fileStr.contains(".zip") || fileStr.contains(".jvp"))
+ if (fileStr.contains(".jar") || fileStr.contains(".zip")
+ || fileStr.contains(".jvp"))
{
// possibly a Jalview archive (but check further)
reply = FileFormat.Jalview;
break;
}
}
- data = data.toUpperCase();
+ data = data.toUpperCase(Locale.ROOT);
if (data.startsWith(ScoreMatrixFile.SCOREMATRIX))
{
reply = FileFormat.ScoreMatrix;
break;
}
+ if (data.startsWith("LOCUS"))
+ {
+ reply = FileFormat.GenBank;
+ break;
+ }
+ if (data.startsWith("ID "))
+ {
+ if (data.substring(2).trim().split(";").length == 7)
+ {
+ reply = FileFormat.Embl;
+ break;
+ }
+ }
if (data.startsWith("H ") && !aaIndexHeaderRead)
{
aaIndexHeaderRead = true;
if ((lessThan > -1)) // possible Markup Language data i.e HTML,
// RNAML, XML
{
- String upper = data.toUpperCase();
+ String upper = data.toUpperCase(Locale.ROOT);
if (upper.substring(lessThan).startsWith("<HTML"))
{
reply = FileFormat.Html;
reply = FileFormat.Phylip;
break;
}
- else
+ else if (!lineswereskipped && looksLikeJnetData(data))
{
- if (!lineswereskipped && looksLikeJnetData(data))
- {
reply = FileFormat.Jnet;
break;
- }
+
}
+ else // phylogenetic file
+ {
+ String identifier = data.toLowerCase();
+ String secondLine = source.nextLine().toLowerCase();
+ if (identifier.startsWith("<phyloxml")
+ || secondLine.startsWith("<phyloxml"))
+ {
+ reply = FileFormat.PhyloXML;
+ break;
+ }
+ // commented out, nexus parser is troublesome
+ // else if (((identifier.startsWith("nexus"))
+ // || (identifier.startsWith("#nexus"))
+ // || (identifier.startsWith("# nexus"))
+ // || (identifier.startsWith("begin"))))
+ // {
+ // reply = FileFormat.Nexus;
+ // break;
+ // }
+ }
lineswereskipped = true; // this means there was some junk before any
// key file signature
}
}
}
-
}