Попробуйте это:
InputStream in = new FileInputStream("filename");
StringBuilder sb = new StringBuilder();
byte[] b = new byte[4096];
for (int n; (n = in.read(b)) != -1;) {
sb.append(new String(b, 0, n));
}
in.close();
String data = sb.toString();
data = data.replace("foo", "bar");
//do whatever you want with data
Я не уверен, насколько хорошо это будет работать с действительно двоичными данными (такими как SWF-файл, используемый в вашем примере). Возможно, двоичные данные будут интерпретированы как символы Юникода и будут отображаться по-другому, если вы их напечатаете. Также возможно, что это вызовет какое-то исключение для недопустимых кодировок символов. Возможно, вы хотите использовать ByteArrayInputStream для двоичных данных, но тогда у вас нет простых способов поиска / замены.