do {
ifs.get(c);
ofs.put(c);
} while (!ifs.eof());

取り敢えず修正

eof()を使って終端判定すると
変なところでeof検出されたりしませんか?