我目前正在构建一个文件管理应用程序,允许用户浏览其设备的文件系统.用户/
从其设备的根目录开始,但可以浏览到他们想要的任何位置,例如内部闪存或SD卡.
此应用程序的一个关键要求是允许用户在任何地方创建新文件夹.像这样的功能对应用程序非常有用.但是,该File#mkdir()
方法在SD卡目录中根本不起作用.
我为清单文件添加了适当的权限.我还写了一个测试,看看哪些目录(我的Lollipop 5.0设备上都存在)允许创建一个新文件夹.根据我的观察,File#mkdir()
只有在内部闪存目录中才有效.
注意:请不要Environment#getExternalStorageDirectory()
与SD卡位置混淆,如本文所述.同样在Lollipop 5.0上,我相信/storage/emulated/0/
并/storage/sdcard0/
参考内部闪存存储,/storage/emulated/1/
并/storage/sdcard1/
参考SD卡(至少对我正在测试的设备是真的).
如何在非root用户Android设备上的外部存储路径之外的区域中创建新文件和文件夹?
表现:
...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
Run Code Online (Sandbox Code Playgroud)
测试:
...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String NEW_FOLDER_NAME = "TestFolder";
testPath(new File(Environment.getExternalStorageDirectory(), NEW_FOLDER_NAME));
testPath(new File("/storage/emulated/0/", NEW_FOLDER_NAME));
testPath(new File("/storage/emulated/1/", NEW_FOLDER_NAME));
testPath(new File("/storage/sdcard0/Download/", NEW_FOLDER_NAME));
testPath(new File("/storage/sdcard1/Pictures/", NEW_FOLDER_NAME));
}
private void testPath(File path) {
String TAG = …
Run Code Online (Sandbox Code Playgroud) 如果我在标准输入流中键入"Hello World"字样,该程序将打印出奇怪的盒子符号,而不是预期的"Hello World",返回标准输出.
#include <stdio.h>
int main(void)
{
// print out all characters from the stream until '/n' character is found
int ch;
while (ch = getchar() != '\n')
{
putchar(ch);
}
putchar('\n');
}
Run Code Online (Sandbox Code Playgroud)
我知道如何解决这个问题.但为什么这行代码不正确?
while (ch = getchar() != '\n')
Run Code Online (Sandbox Code Playgroud) 我试图阅读并按照PyCharm和IntelliJ的说明启用此功能,但他们的设置菜单似乎与CLion的相同.
我希望我的JTextArea组件能够完全填满我的JPanel.正如你在这里看到的那样,在这张照片中,JTextArea周围有一些填充物(带有蚀刻边框的红色):
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class Example
{
public static void main(String[] args)
{
// Create JComponents and add them to containers.
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextArea jta = new JTextArea("Hello world!");
panel.add(jta);
frame.setLayout(new FlowLayout());
frame.add(panel);
// Modify some properties.
jta.setRows(10);
jta.setColumns(10);
jta.setBackground(Color.RED);
panel.setBorder(new EtchedBorder());
// Display the Swing application.
frame.setSize(200, 200);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个带有 main 方法的程序,该方法使用java.util.Scanner
该类来接收用户输入。
import java.util.Scanner;
public class Main {
static int fooValue = 0;
public static void main(String[] args) {
System.out.println("Please enter a valid integer value.");
fooValue = new Scanner(System.in).nextInt();
System.out.println(fooValue + 5);
}
}
Run Code Online (Sandbox Code Playgroud)
这个程序所做的就是接收一个整数输入,并输出一个整数加 5。这意味着我可以想出一个这样的表:
+-------+-----------------+
| Input | Expected output |
+-------+-----------------+
| 2 | 7 |
| 3 | 8 |
| 5 | 12 |
| 7 | 13 |
| 11 | 16 |
+-------+-----------------+
Run Code Online (Sandbox Code Playgroud)
我需要对这组输入数据进行 JUnit 测试。处理这样的问题最简单的方法是什么?
我目前正在使用valgrind-3.10.0.SVN,gcc 4.8.2和Ubuntu 14.04.这是我文件中的代码foo.c
#include <stdio.h>
#include <string.h>
int main()
{
char foo[] = "Foo";
char bar[] = "Bar";
printf("%d\n", strcmp(foo, bar));
}
Run Code Online (Sandbox Code Playgroud)
我用这个命令编译:
gcc foo.c -o foo
这些是执行命令和输出:
./foo
4
valgrind ./foo
1
Run Code Online (Sandbox Code Playgroud)
为什么Valgrind会影响我的strcmp()函数的输出?
假设我想使用该java.awt.Graphics.drawString(String str, int x, int y)
方法在某些特定坐标处绘制字符串,例如(300,300)。但是,该drawString()
方法将始终将字符串的左下角定位在那些坐标处,而不是我想要的左上角。
在指定坐标处绘制字符串左上角的简单方法是什么?我知道该java.awt.FontMetrics
实用工具类,但可以肯定它是否会有所帮助。
我正在尝试创建一个图形绘制程序,允许用户通过将鼠标拖到屏幕上来绘制红色像素.所以在某种程度上,您可以将此程序视为Microsoft的Paint程序,但只使用铅笔绘图工具和红色.
不幸的是mouseDragged()
,我的程序中的功能无法正常工作.如果我移动鼠标太快,它会跳过屏幕上的一些像素,如下所示:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameView extends JFrame {
JPanel panel;
Graphics2D drawingContext;
public static void main(String[] args) {
new FrameView();
}
public FrameView() {
panel = new JPanel();
panel.addMouseMotionListener(new MouseControls());
panel.setBackground(Color.WHITE);
this.add(panel);
this.setSize(new Dimension(500, 500));
this.setTitle("Drawing Program");
this.setVisible(true);
drawingContext = (Graphics2D)panel.getGraphics();
}
private class MouseControls extends MouseAdapter {
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getX();
int y = e.getY();
final int WIDTH = 1;
final int HEIGHT = 1; …
Run Code Online (Sandbox Code Playgroud) 我目前在使用javax.sound.sampled
图书馆时遇到了麻烦.这是我用来播放音频文件的MCV代码:
import javax.sound.sampled.*;
import java.io.File;
public class Foo
{
public static void main(String[] args)
{
try
{
File f = new File("alarm.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(f);
Clip clip = AudioSystem.getClip();
clip.open(ais);
clip.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码有时会抛出一个UnsupportedAudioFileException
.
基本上,我有5个.WAV文件,我知道这些文件没有损坏,因为当我在我的音乐播放软件中打开它们时它们完全没问题.但是,Java程序仅适用于其中的3个.
Oracle在此提及对此文件格式的支持.如何确保所有.WAV文件都与Java的音频API兼容?是否有一种万无一失的播放.WAV文件的方式,如果由于某种原因他们没有适当的编码?
我正在学习C中的嵌套结构,我想要做的是能够为我的struct的成员结构赋值.我无法搞清楚这一点,我不想强迫自己在结构初始化中初始化成员结构.当我尝试编译此代码时,为什么一直出现错误?
main.c: In function 'main':
main.c:16:23: error: expected expression before '{' token
fooPerson.fullname = {"Foo", 'B', "Baz"};
Run Code Online (Sandbox Code Playgroud)
#define LEN 20
struct names {
char first[LEN];
char middle;
char last[LEN];
};
struct person {
struct names fullname;
};
int main() {
struct person fooPerson;
fooPerson.fullname = {"Foo", 'B', "Baz"};
// NOT this: it works, but not the solution I'm asking for
// struct person fooPerson = {{"Foo", 'B', "Baz"}};
}
Run Code Online (Sandbox Code Playgroud)