blob: ed08479f04603658aace57e3114eb4be104c0081 [file] [log] [blame]
/* Copyright (C) 2000 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
package gnu.gcj.io;
import java.util.*;
import java.io.*;
public class MimeTypes
{
private static Hashtable mime_types;
public static void fillFromFile (Hashtable table, String fname)
throws IOException
{
LineNumberReader reader =
new LineNumberReader (new FileReader (fname));
while (reader.ready ())
{
StringTokenizer tokenizer =
new StringTokenizer (reader.readLine ());
try
{
String t = tokenizer.nextToken ();
if (! t.startsWith ("#"))
{
while (true)
{
// Read the next extension
String e = tokenizer.nextToken ();
if ((e != null) && (! e.startsWith ("#")))
table.put (e, t);
else
break;
}
}
} catch (NoSuchElementException ex) {
// Do nothing.
}
}
}
// This is the primary interface to this class.
public static String getMimeTypeFromExtension (String extension)
{
if (mime_types == null)
{
mime_types = new Hashtable ();
// First populate the hash table with the default mime type
// mappings.
int i = DefaultMimeTypes.types.length;
while (i > 1)
{
mime_types.put (DefaultMimeTypes.types[i - 2],
DefaultMimeTypes.types[i - 1]);
i = i - 2;
}
// Now read mime types from /etc/mime.types if it exists.
// This should override the default values.
try {
fillFromFile (mime_types, "/etc/mime.types");
} catch (IOException ex) {
// Do nothing.
}
// Now read mime types from ~/.mime.types.
// FIXME: We can't currently parse this file.
}
String type = (String) mime_types.get (extension);
if (type == null)
return ("application/octet-stream");
else
return (type);
}
}