]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/manager/util/IOUtils.java
c0918ae7e6aed803b33ea4a12348614f082a71f8
[signal-cli] / src / main / java / org / asamk / signal / manager / util / IOUtils.java
1 package org.asamk.signal.manager.util;
2
3 import org.whispersystems.signalservice.internal.util.Util;
4
5 import java.io.ByteArrayOutputStream;
6 import java.io.File;
7 import java.io.FileOutputStream;
8 import java.io.IOException;
9 import java.io.InputStream;
10 import java.io.OutputStream;
11 import java.nio.file.Files;
12 import java.nio.file.Path;
13 import java.nio.file.attribute.PosixFilePermission;
14 import java.nio.file.attribute.PosixFilePermissions;
15 import java.util.EnumSet;
16 import java.util.Set;
17
18 import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
19 import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
20 import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
21
22 public class IOUtils {
23
24 public static File createTempFile() throws IOException {
25 final File tempFile = File.createTempFile("signal-cli_tmp_", ".tmp");
26 tempFile.deleteOnExit();
27 return tempFile;
28 }
29
30 public static byte[] readFully(InputStream in) throws IOException {
31 ByteArrayOutputStream baos = new ByteArrayOutputStream();
32 Util.copy(in, baos);
33 return baos.toByteArray();
34 }
35
36 public static void createPrivateDirectories(File file) throws IOException {
37 if (file.exists()) {
38 return;
39 }
40
41 final Path path = file.toPath();
42 try {
43 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE);
44 Files.createDirectories(path, PosixFilePermissions.asFileAttribute(perms));
45 } catch (UnsupportedOperationException e) {
46 Files.createDirectories(path);
47 }
48 }
49
50 public static void createPrivateFile(File path) throws IOException {
51 final Path file = path.toPath();
52 try {
53 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE);
54 Files.createFile(file, PosixFilePermissions.asFileAttribute(perms));
55 } catch (UnsupportedOperationException e) {
56 Files.createFile(file);
57 }
58 }
59
60 public static void copyStreamToFile(InputStream input, File outputFile) throws IOException {
61 copyStreamToFile(input, outputFile, 8192);
62 }
63
64 public static void copyStreamToFile(InputStream input, File outputFile, int bufferSize) throws IOException {
65 try (OutputStream output = new FileOutputStream(outputFile)) {
66 byte[] buffer = new byte[bufferSize];
67 int read;
68
69 while ((read = input.read(buffer)) != -1) {
70 output.write(buffer, 0, read);
71 }
72 }
73 }
74 }