]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/util/IOUtils.java
Reformat project
[signal-cli] / src / main / java / org / asamk / signal / util / IOUtils.java
1 package org.asamk.signal.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.io.StringWriter;
12 import java.nio.charset.Charset;
13 import java.nio.file.Files;
14 import java.nio.file.Path;
15 import java.nio.file.attribute.PosixFilePermission;
16 import java.nio.file.attribute.PosixFilePermissions;
17 import java.util.EnumSet;
18 import java.util.Set;
19
20 import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
21 import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
22 import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
23
24 public class IOUtils {
25
26 private IOUtils() {
27 }
28
29 public static File createTempFile() throws IOException {
30 return File.createTempFile("signal_tmp_", ".tmp");
31 }
32
33 public static String readAll(InputStream in, Charset charset) throws IOException {
34 StringWriter output = new StringWriter();
35 byte[] buffer = new byte[4096];
36 int n;
37 while (-1 != (n = in.read(buffer))) {
38 output.write(new String(buffer, 0, n, charset));
39 }
40 return output.toString();
41 }
42
43 public static byte[] readFully(InputStream in) throws IOException {
44 ByteArrayOutputStream baos = new ByteArrayOutputStream();
45 Util.copy(in, baos);
46 return baos.toByteArray();
47 }
48
49 public static void createPrivateDirectories(String directoryPath) throws IOException {
50 final File file = new File(directoryPath);
51 createPrivateDirectories(file);
52 }
53
54 public static void createPrivateDirectories(File file) throws IOException {
55 if (file.exists()) {
56 return;
57 }
58
59 final Path path = file.toPath();
60 try {
61 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE);
62 Files.createDirectories(path, PosixFilePermissions.asFileAttribute(perms));
63 } catch (UnsupportedOperationException e) {
64 Files.createDirectories(path);
65 }
66 }
67
68 public static void createPrivateFile(String path) throws IOException {
69 final Path file = new File(path).toPath();
70 try {
71 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE);
72 Files.createFile(file, PosixFilePermissions.asFileAttribute(perms));
73 } catch (UnsupportedOperationException e) {
74 Files.createFile(file);
75 }
76 }
77
78 public static String getDataHomeDir() {
79 String dataHome = System.getenv("XDG_DATA_HOME");
80 if (dataHome != null) {
81 return dataHome;
82 }
83
84 return System.getProperty("user.home") + "/.local/share";
85 }
86
87 public static void copyStreamToFile(InputStream input, File outputFile) throws IOException {
88 copyStreamToFile(input, outputFile, 8192);
89 }
90
91 public static void copyStreamToFile(InputStream input, File outputFile, int bufferSize) throws IOException {
92 try (OutputStream output = new FileOutputStream(outputFile)) {
93 byte[] buffer = new byte[bufferSize];
94 int read;
95
96 while ((read = input.read(buffer)) != -1) {
97 output.write(buffer, 0, read);
98 }
99 }
100 }
101 }