Вы можете добавить записи в файл hosts , используя класс Files
, как показано в этом сообщении: Как добавить текст в существующий файл в Java .
Это работает на всех платформах (да, на всех из них: включая Windows, Mac, Linux, Android и т. Д.) И блокирует доступ для всех браузеров без необходимости использования прокси или специальных расширений браузера (которые можно удалить в большинстве случаев).
Вот простой код, с которого можно начать. Не стесняйтесь редактировать его в соответствии с вашими потребностями:
public void blockSite(String url) {
// Note that this code only works in Java 7+,
// refer to the above link about appending files for more info
// Get OS name
String OS = System.getProperty("os.name").toLowerCase();
// Use OS name to find correct location of hosts file
String hostsFile = "";
if ((OS.indexOf("win") >= 0)) {
// Doesn't work before Windows 2000
hostsFile = "C:\\Windows\\System32\\drivers\\etc\\hosts";
} else if ((OS.indexOf("mac") >= 0)) {
// Doesn't work before OS X 10.2
hostsFile = "etc/hosts";
} else if ((OS.indexOf("nux") >= 0)) {
hostsFile = "/etc/hosts";
} else {
// Handle error when platform is not Windows, Mac, or Linux
System.err.println("Sorry, but your OS doesn't support blocking.");
System.exit(0);
}
// Actually block site
Files.write(Paths.get(hostsFile),
("127.0.0.1 " + url).getBytes(),
StandardOpenOption.APPEND);
}
Импорт для вышеуказанного метода:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
Пример использования:
blockSite("www.example.com");
Примечание:
Это должно быть выполнено от имени администратора (Windows) или с использованием sudo
(Mac, Linux).
Это может не работать на некоторых платформах, так как оно было протестировано только на Ubuntu Linux.
P.S. Если вы создаете программное обеспечение для родительского контроля, вам также следует обратить внимание на блокирующие программы. Не все вещи, которые вы хотели бы заблокировать, находятся в Интернете. Вот простой код для этого:
/**
Blocks programs.
@param programs - The array of process names.
@param timeout - The time between blocks, in milliseconds.
This parameter should not be set below 100, to avoid slowdown.
@author https://stackoverflow.com/users/5905216/h-a-sanger
*/
public void blockPrograms(int timeout, String...programs) throws IOException {
// Get OS name
String OS = System.getProperty("os.name").toLowerCase();
// Identify correct blocking command for OS
String command = "";
if ((OS.indexOf("win") >= 0)) {
command = "taskkill /f /im ";
} else if ((OS.indexOf("mac") >= 0) || (OS.indexOf("nux") >= 0)) {
command = "killall ";
} else {
// Handle error when platform is not Windows, Mac, or Linux
System.err.println("Sorry, but your OS doesn't support blocking.");
System.exit(0);
}
// Start blocking!
while(true) {
// Cycle through programs list
for(int i = 0; i < programs.length; i++) {
// Block program
Runtime.getRuntime().exec(command + programs[i]);
}
// Timeout
try { Thread.sleep(timeout); } catch(InterruptedException e) {}
}
}
Импорт для вышеуказанного кода:
import java.io.IOException;
Пример использования:
blockPrograms(100, "chrome", "firefox");
Опять же, позвольте мне отметить, что это было проверено только на Ubuntu Linux.
P.P.S: Пожалуйста, не обращайте на меня внимания, я довольно новичок в ответах на вопросы по SO.