Java Fileoutputstream和UTF-8文件下载
我想使用Java Fileoutputstream和UTF-8文件下载,java,file,utf-8,fileoutputstream,utf,Java,File,Utf 8,Fileoutputstream,Utf,我想使用InputStream和FileOutputStream下载文件。我的代码如下所示: URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod("GET"); con.setRequestProperty("Cache-Control", "no-cache");
InputStream
和FileOutputStream
下载文件。我的代码如下所示:
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
con.setRequestProperty("Cache-Control", "no-cache");
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
try {
InputStream inputStream = con.getInputStream();
FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv");
int bytesRead = -1;
byte[] buffer = new byte[4096];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch(Exception e) {
//
} finally {
outputStream.close();
inputStream.close();
}
代码运行良好,可以下载文件。但是我想知道,如果一个文件包含土耳其语字符(ş、Ğ、İ、Ö等),那么这段代码会下载包含这些字符的文件吗?因此,我想下载包含这些字符的文件(如果包括这些字符),并在我的文件中看到这些字符
那么,这段代码与UTF-8配合得好吗?如果您正在阅读的文件是用utf8编码的,那么您的代码就可以正常工作。如果不是,则可以使用将其转换为utf8,然后运行代码。这应该行得通
编辑:当您想在utf-8中写入数据时,必须将FileOutputStream包装在OutputStreamWriter中,并在创建时传递编码 没有代码试图转换为字符;您通过未更改的方式传递字节,因此无需担心编码问题。你的代码可以正常工作
只有当您使用
Reader
s和Writer
s时,您才需要担心编码。假设con
是URLConnection
的一个实例,它的getInputStream()
将为您提供一个直接的网络流,读取服务器发送的字节。不会进行任何转换。由于将字节直接传输到文件中,因此它们将存储在文件中,无需任何修改
假设服务器使用UTF-8
编码发送文件,并且您随后用来打开文件的工具也使用UTF-8
编码,您将正确看到所有字符。这同样适用于任何其他编码,只要服务器和工具使用相同的编码。您的程序不会添加任何内容,因为它只是传输字节,而不是字符
顺便说一句,使用最新的API可以简化这种传输:
try(ReadableByteChannel in=Channels.newChannel(con.getInputStream());
FileChannel out=FileChannel.open(Paths.get("C:\\programs\\TRYFILE.csv"),
StandardOpenOption.CREATE, StandardOpenOption.WRITE,
StandardOpenOption.TRUNCATE_EXISTING)) {
out.transferFrom(in, 0, Long.MAX_VALUE);
}
当您使用import static java.nio.file.StandardOpenOption.*时,它的可读性更高代码>:
try(ReadableByteChannel in=Channels.newChannel(con.getInputStream());
FileChannel out=FileChannel.open(Paths.get("C:\\programs\\TRYFILE.csv"),
CREATE, WRITE, TRUNCATE_EXISTING) {
out.transferFrom(in, 0, Long.MAX_VALUE);
}
您传输的字节不变,因此,结果将是源代码使用的任何编码。如果连接使用UTF-8
,结果将是UTF-8
。我不使用任何不同的工具,只是HttpURLConnection。我编辑了我的代码并添加了完整的代码。我不知道我的一方在以后打开文件时是否使用了UTF-8编码。你能看看我的完整代码并再次回答我的问题吗?@javauser35:答案仍然有效。您没有在代码中使用任何工具,但是您正在存储一个文件,所以我想您总有一天会打开它,不是吗?因此,用于打开文件的工具必须采用与服务器相同的编码。如上所述,您的程序不会更改编码。