FizzBuzz from a file
If you extract the logic that builds the output string to its own method buildFizzBuzz,
you'll get something testable:

public static String buildFizzBuzz(int fizz, int buzz, int limit) {
    StringBuilder sb = new StringBuilder();
    // ...
    return sb.toString();
}

public static void printFizzBuzz(String line) {
    int fizz = Integer.parseInt(line.split(" ")[0]);
    int buzz = Integer.parseInt(line.split(" ")[1]);
    int limit = Integer.parseInt(line.split(" ")[2]);

    System.out.println(buildFizzBuzz(fizz, buzz, limit));
}


And you can add some unit tests, for example:

@Test
public void test_3_5_20() {
    assertEquals("1 2 F 4 B F 7 8 F B 11 F 13 14 FB 16 17 F 19 B", buildFizzBuzz(3, 5, 20));
}

@Test
public void test_2_7_15() {
    assertEquals("1 F 3 F 5 F B F 9 F 11 F 13 FB 15", buildFizzBuzz(2, 7, 15));
}


Having these unit test, which pass at the moment,
now we can refactor a bit safely, knowing that if anything breaks, the tests will break.

It's not great to have a check on the limit twice in the loop,
in the loop condition and also in the loop body.
It would be better to eliminate the condition from the body,
always appending ' ', and cutting off the space at the end.

It's not great to have a check on i % fizz twice.
It would be better to use a boolean to track if fizz or buzz were already appended.

Putting these two points together, the implementation becomes:

public static String buildFizzBuzz(int fizz, int buzz, int limit) {
    StringBuilder sb = new StringBuilder();

    for (int i = 1; i &lt;= limit; i++) {
        boolean shouldAppendNum = true;
        if (i % fizz == 0) {
            sb.append("F");
            shouldAppendNum = false;
        }
        if (i % buzz == 0) {
            sb.append("B");
            shouldAppendNum = false;
        }
        if (shouldAppendNum) {
            sb.append(i);
        }
        sb.append(" ");
    }
    sb.setLength(sb.length() - 1);
    return sb.toString();
}