FileReader rd=new FileReader(\"new.mp4\");
FileWriter wr=new FileWriter(\"output.mp4\");
int ch;
while((ch=rd.read())!=-1)
wr.write(ch);
wr.flush();
wr.close();
<
FileReader (and indeed anything extending Reader) is indeed for text. From the documentation of Reader:
Abstract class for reading character streams.
(Emphasis mine.) Look at the API and you'll see it's all to do with text - char instead of byte all over the place.
InputStream and OutputStream are for binary data, such as mp4 files.
Personally I would avoid FileReader altogether though, as it always uses the system default character encoding - at least before Java 11. Instead, use InputStreamReader around a FileInputStream... but only when you want to deal with text. (Alternatively, use Files.newBufferedReader.)
As an aside, that's a very inefficient way of copying from an input to an output... use the overloads of read and write which read into or write from a buffer - either a byte[] or a char[]. Otherwise you're calling read and write for every single byte/character in the file.
You should also close IO streams in finally blocks so they're closed even if an exception is thrown while you're processing them.